macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

NSTimeZoneクラス

INDEX>Foundation>

apple(OS X)
apple(iOS)

解説

継承 NSObject
準拠 NSObject (NSObject)
フレームワーク /System/Library/Frameworks/Foundation.framework
使用可能 OS X 10.0以降
iOS 2.0以降
定義 NSTimeZone.h

概要

本クラスについて

タイムゾーンのクラスです。グリニッジ標準時と各地域の標準時との時差の情報を持っています。日本標準時JST)はグリニッジ標準時よりも9時間進んでいますので+0900と表現されます。

C言語フレームワークである、Core FoundationのCFTimeZoneRefとトールフリーブリッジです。ARC環境以外ではそのまま使用できます。
どちらかのフレームワークにしかないメソッド・関数を使いたい場合、キャストして使うことが出来ます。

ARC環境では、管理対象のオブジェクトキャストに__bridge、__bridge_retained、__bridge_transferが必要になります。

作成と初期化

タイムゾーンオブジェクトを作成する方法として"JST"などタイムゾーンの省略形で作成するには(+ timeZoneWithAbbreviationメソッドを使用します。"Asia/Tokyo"など名前で作成するには(+ timeZoneWithNameメソッドを使用します。
名前とデータから作成するには(+ timeZoneWithName:dataメソッドを使用します。データは/usr/share/zoneinfoにあるデータです。
秒数で指定してグリニッジ標準時からの時差でタイムゾーンを作成するには(+ timeZoneForSecondsFromGMTメソッドを使用します。

allocで作成して"Asia/Tokyo"など名前で初期化するには(– initWithNameメソッドを使用します。allocで作成して名前とデータから作成するには(– initWithName:data:)メソッドを使用します。データは/usr/share/zoneinfoにあるデータです。タイムゾーンデータのバージョンを取得するには(+ timeZoneDataVersionメソッドを使用します。

タイムゾーンの作成と情報の取得

#pragma mark NSTimeZone
-(void)method002
{
    NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
    NSTimeZone *tZone = [NSTimeZone localTimeZone];
    [formatter setTimeZone:tZone];
    
    NSDate * aDate = [formatter dateFromString:@"2012-08-15 01:01:45 +0000"];
    
    NSLog(@"%s %@",__FUNCTION__ ,[tZone name]);
    //=>-[OOOAppDelegate method002] Asia/Tokyo
    
    NSLog(@"%s %d",__FUNCTION__ ,[tZone secondsFromGMT]);
    //=>-[OOOAppDelegate method002] 32400
    
    NSLog(@"%s %d",__FUNCTION__ ,[tZone secondsFromGMTForDate:aDate]);
    //=>-[OOOAppDelegate method002] 32400
    
    NSLog(@"%s %@",__FUNCTION__ ,[tZone abbreviation]);
    //=>-[OOOAppDelegate method002] JST
    
    NSLog(@"%s %@",__FUNCTION__ ,[tZone abbreviationForDate:aDate]);
    //=>-[OOOAppDelegate method002] JST
    
    NSLog(@"%s %@",__FUNCTION__ ,[tZone data]);
    //=>-[OOOAppDelegate method002] <545a6966 00000000 ...

}

システムのタイムゾーンを使う

システムのローカルタイムゾーンを取得するには(+ localTimeZoneメソッドを使用します。
デフォルトのタイムゾーンをセットするには(+ setDefaultTimeZoneメソッドを、取得するには(+ defaultTimeZoneメソッドを使用します。システムのタイムゾーンを取得するには(+ systemTimeZone)メソッドを使用します。システムのタイムゾーンをリセットするには(+ resetSystemTimeZoneメソッドを使用します。
システムのタイムゾーンは、環境設定で時間帯を変更するとすぐに変更が反映されます。

タイムゾーン情報の取得

タイムゾーンの省略形と名前の辞書を取得するには(+ abbreviationDictionaryメソッドを使用します。システムで使うことのできる名前を配列で取得するには(+ knownTimeZoneNamesメソッドを使います。タイムゾーンの省略形と名前の辞書をセットするには(+ setAbbreviationDictionary)を使用します。既存の辞書と置き換わります。

特定のタイムゾーン情報の取得

タイムゾーンの省略形を取得するには(– abbreviationメソッドを使用します。データからタイムゾーンの省略形を取得するには(– abbreviationForDate:)メソッドを使用します。
タイムゾーン名を取得するには(– nameメソッドを使用します。GMTからの時差を秒で取得するには(– secondsFromGMT)を使用します。データからGMTからの時差を秒で取得するには(– secondsFromGMTForDate)を使用します。タイムゾーンデータを取得するには(– dataメソッドを使用します。

タイムゾーンの比較

タイムゾーンを比較するには(– isEqualToTimeZoneメソッドを使用します。

タイムゾーンの文字列化

タイムゾーンを文字列にするには(– descriptionメソッドを使用します。ローカライズされた文字列を取得するには(– localizedName:localeメソッドを使用します。

日本語でタイムゾーン名称を取得する

#pragma mark NSTimeZone
-(void)method005
{

    NSTimeZone *tZone = [NSTimeZone timeZoneWithAbbreviation:@"EDT"];
    NSLocale *jpLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"ja-JP"];
    NSLog(@"%s %@",__FUNCTION__ ,[tZone localizedName:NSTimeZoneNameStyleGeneric locale:jpLocale]);
    //=>アメリカ東部時間
}

サマータイムなどデイライトセービング情報

レシーバのNSTimeZoneはデイライトセービングがあるかどうかは(– isDaylightSavingTime)で取得できます。デイライトセービング時の時間のずれは(– daylightSavingTimeOffsetメソッドで取得できます。

指定の日時がレシーバのタイムゾーンでデイライトセービングタイムかどうかを取得するには(– isDaylightSavingTimeForDateメソッドを使用します。その場合の時間のずれは(– daylightSavingTimeOffsetForDateメソッドで取得できます。

次のデイライトセービングタイムへの移行時刻を取得するには(– nextDaylightSavingTimeTransitionメソッドを使用します。指定の日時以降のデイライトセービングタイムへの移行時刻を取得するには(– nextDaylightSavingTimeTransitionAfterDateメソッドを使用します。

デイライトセービング情報の取得

#pragma mark NSTimeZone
-(void)method004
{
    NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
    NSTimeZone *tZone = [NSTimeZone timeZoneWithAbbreviation:@"EDT"];
    [formatter setTimeZone:tZone];
    
    NSDate * aDate = [formatter dateFromString:@"2012-08-15 10:01:45 +0000"];
    
    
    NSLog(@"%s %@",__FUNCTION__ ,([tZone isDaylightSavingTime])?@"YES":@"NO");
    
    NSLog(@"%s %f",__FUNCTION__ ,[tZone daylightSavingTimeOffset]);

    NSLog(@"%s %@",__FUNCTION__ ,([tZone isDaylightSavingTimeForDate:aDate])?@"YES":@"NO");
    
    NSLog(@"%s %f",__FUNCTION__ ,[tZone daylightSavingTimeOffsetForDate:aDate]);
    
    NSDate *nextDate = [tZone nextDaylightSavingTimeTransition];
    NSLog(@"%s %@",__FUNCTION__ ,nextDate);
}

適合するプロトコル

サブクラス化の注意