NSDateクラス
2010. 10. 24
●概要
NSDateオブジェクトは時間の1点を表します。
NSDateはクラスクラスタで、1つのパブリックスーパークラスであり、時間に関する値とプログラムインターフェイスの指定を宣言します。
NSDateを使って生成したオブジェクトはdateオブジェクトと呼ばれます。
これは不変オブジェクトです。
クラスクラスタという性質のため、NSDateクラスが返すオブジェクトは抽象クラスのインスタンスではなく、プライベートサブクラスのインスタンスになります。
たとえdateオブジェクトのクラスがプライベートであってもインターフェイスはパブリックであり、抽象スーパークラスであるNSDateによって宣言されています。
一般的に、dateオブジェクトをインスタンス化する際には、最適なdate~クラスメソッドが呼び出されます。
NSDateは抽象クラスで、日時の生成、比較、表示や、期間の計算などの機能を提供します。
NSDateはプログラムインターフェイスを通して現在の最適なdateオブジェクトを要求して返します。
NSDateは、不変の時点から現在までの時間を表す、軽量なdateオブジェクトを返します。
このクラスは、任意の暦を表す基礎を提供するように設計されています。
NSDateの唯一の原始的なメソッドはtimeIntervalSinceReferenceDateで、他の全てのNSDateインターフェイスメソッドの基礎を提供します。
このメソッドは2001年1月1日(GMT)を基準とした参照時間を返します。
生成した日付を表す文字列を含み、dateFromString:メソッドやstringFromDate:メソッドを使って、NSdateFormatterのインスタンスの解析に使用してください。
(詳細は『Date Formatters』を参照してください)
NSDateのモデルは1582年10月でユリウス暦からグレゴリオ暦に変更されていて、暦の計算を連携して行うNSCalendarへの変換時に適用されます。
注:ただし、いくつかのロケールではグレゴリオ暦の採用時期が異なっており、例えばイギリスでは1752年9月まで切り替えられていませんでした。
NSDateには、『toll-free bridged』の対象としてCocoa FoundationのCFDate型があります。
これはFoudationオブジェクトを橋渡ししてCore Foundationの型に変換し、関数やメソッドで呼び出せることを意味します。
例えば、NSDate *パラメータをメソッドで参照する際、CFDateRefに渡し、CFDateRefパラメータとして関数で参照でき、(コンパイラの警告を抑えるために型変換をして)NSDateインスタンスに渡すこともできます。
サブクラス化の注意
NSDateのサブクラス化の主な理由は、特定の暦のシステムを操作するのに便利なメソッドのクラスを生成することです。
しかし、例えば日付と時刻の細かい時間の断片を取得するなど、他の理由でNSDateクラスのカスタム化する場合もあります。
メソッドのオーバーライド
プライベートまたはパブリックな、動作の異なるNSDateのサブクラスを作る場合、以下の事を行う必要があります。
・(絶対参照日に関連付けした)日付と時刻の値を保持に適したインスタンス変数の宣言。
・正しい日付と時刻の値に基づいたインスタンス変数を提供する、timeIntervalSinceReferenceDateインスタンスメソッドのオーバーライド。
・initWithTimeIntervalSinceReferenceDate:をオーバーライドした、指定された初期化メソッド。
暦のシステムを表すサブクラスを生成する場合、この暦の単位に分割した過去と未来の期間のメソッドを定義する必要があります。
何故なら、NSDateクラスはNSCopyingとNSCodingのプロトコルを採用しており、サブクラスはこれらのプロトコルを全てのメソッドで実装する必要があるためです。
特別な考慮事項
サブクラスはNSDateの使う絶対参照日(2001年1月1日 GMT)と異なる参照日を使う事ができます。
その場合はメソッドを実装する際に、timeIntervalSinceReferenceDateとinitWithTimeIntervalSinceReferenceDate:を使って絶対参照日を設定します。
この参照日は、メソッドのタイトルの中で参照できる絶対参照日です。
これらのメソッド内で絶対参照日を使用しない場合、生成したサブクラスのNSDateオブジェクトとプライベートサブクラスのNSDateオブジェクトの比較は動作しません。
●タスク
●日付オブジェクトの生成と初期化
+ date
+ dateWithTimeIntervalSinceNow:
+ dateWithTimeInterval:sinceDate:
+ dateWithTimeIntervalSinceReferenceDate:
+ dateWithTimeIntervalSince1970:
– init
– initWithTimeIntervalSinceNow:
– initWithTimeInterval:sinceDate:
– initWithTimeIntervalSinceReferenceDate:
– initWithTimeIntervalSince1970:
●時間の境界の取得
+ distantFuture
+ distantPast
●日付の比較
– isEqualToDate:
– earlierDate:
– laterDate:
– compare:
●時間間隔の取得
– timeIntervalSinceDate:
– timeIntervalSinceNow
+ timeIntervalSinceReferenceDate
– timeIntervalSinceReferenceDate
– timeIntervalSince1970
●時間間隔の追加
– dateByAddingTimeInterval:
– addTimeInterval:
●文字列としての日付の表現
– description
– descriptionWithLocale:
●クラスメソッド
・date
+ (id)date
現在の日付と時間の新しい日付セットを生成して返します。
このメソッドはデフォルトの初期化メソッドとして、このクラスのinitを使用します。
以下にdateメソッドを使用した、現在時刻を取得するサンプルコードを示します。
・dateWithTimeIntervalSince1970:
+ (id)dateWithTimeIntervalSince1970:(NSTimeInterval)seconds
リファレンス(1970年1月1日0時0分0秒(GMT))に指定した秒数を加えたNSDateオブジェクトセットを作成し、返します。
このメソッドは、BSDシステムから返されるtime_t値からNSDateオブジェクトを作成する際に役立ちます。
seconds:リファレンスの日時に加える秒数を指定します。
現在の日時より以前の日時を得る場合は、負の値を指定します。
・dateWithTimeIntervalSinceNow:
+ (id)dateWithTimeIntervalSinceNow:(NSTimeInterval)seconds
現在の日時に指定した秒数を加えたNSDateオブジェクトセットを作成し、返します。
seconds:現在の日時に加える秒数を指定します。
現在の日時より以前の日時を得る場合は、負の値を指定します。
・timeIntervalSinceReferenceDate
+ (NSTimeInterval)timeIntervalSinceReferenceDate
2001年1月1日 GMTから現在までの経過秒数を返します。
戻り値は現在の日時とシステムの絶対参照日(2001年1月1日 GMT)との期間です。
このメソッドはNSDateの基本メソッドです。
NSDateをサブクラス化する際は、このメソッドをオーバーライドして独自の実装をしてください。
●インスタンスメソッド
・timeIntervalSinceReferenceDate
- (NSTimeInterval)timeIntervalSinceReferenceDate
2001年1月1日 GMTからレシーバまでの経過秒数を返します。
戻り値はレシーバとシステムの絶対参照日(2001年1月1日 GMT)との期間です。
レシーバが絶対参照日以前の場合、戻り値は負になります。
●定数
●通知
参考文献
・NSDate Class Reference
NSDateオブジェクトは時間の1点を表します。
NSDateはクラスクラスタで、1つのパブリックスーパークラスであり、時間に関する値とプログラムインターフェイスの指定を宣言します。
NSDateを使って生成したオブジェクトはdateオブジェクトと呼ばれます。
これは不変オブジェクトです。
クラスクラスタという性質のため、NSDateクラスが返すオブジェクトは抽象クラスのインスタンスではなく、プライベートサブクラスのインスタンスになります。
たとえdateオブジェクトのクラスがプライベートであってもインターフェイスはパブリックであり、抽象スーパークラスであるNSDateによって宣言されています。
一般的に、dateオブジェクトをインスタンス化する際には、最適なdate~クラスメソッドが呼び出されます。
NSDateは抽象クラスで、日時の生成、比較、表示や、期間の計算などの機能を提供します。
NSDateはプログラムインターフェイスを通して現在の最適なdateオブジェクトを要求して返します。
NSDateは、不変の時点から現在までの時間を表す、軽量なdateオブジェクトを返します。
このクラスは、任意の暦を表す基礎を提供するように設計されています。
NSDateの唯一の原始的なメソッドはtimeIntervalSinceReferenceDateで、他の全てのNSDateインターフェイスメソッドの基礎を提供します。
このメソッドは2001年1月1日(GMT)を基準とした参照時間を返します。
生成した日付を表す文字列を含み、dateFromString:メソッドやstringFromDate:メソッドを使って、NSdateFormatterのインスタンスの解析に使用してください。
(詳細は『Date Formatters』を参照してください)
NSDateのモデルは1582年10月でユリウス暦からグレゴリオ暦に変更されていて、暦の計算を連携して行うNSCalendarへの変換時に適用されます。
注:ただし、いくつかのロケールではグレゴリオ暦の採用時期が異なっており、例えばイギリスでは1752年9月まで切り替えられていませんでした。
NSDateには、『toll-free bridged』の対象としてCocoa FoundationのCFDate型があります。
これはFoudationオブジェクトを橋渡ししてCore Foundationの型に変換し、関数やメソッドで呼び出せることを意味します。
例えば、NSDate *パラメータをメソッドで参照する際、CFDateRefに渡し、CFDateRefパラメータとして関数で参照でき、(コンパイラの警告を抑えるために型変換をして)NSDateインスタンスに渡すこともできます。
サブクラス化の注意
NSDateのサブクラス化の主な理由は、特定の暦のシステムを操作するのに便利なメソッドのクラスを生成することです。
しかし、例えば日付と時刻の細かい時間の断片を取得するなど、他の理由でNSDateクラスのカスタム化する場合もあります。
メソッドのオーバーライド
プライベートまたはパブリックな、動作の異なるNSDateのサブクラスを作る場合、以下の事を行う必要があります。
・(絶対参照日に関連付けした)日付と時刻の値を保持に適したインスタンス変数の宣言。
・正しい日付と時刻の値に基づいたインスタンス変数を提供する、timeIntervalSinceReferenceDateインスタンスメソッドのオーバーライド。
・initWithTimeIntervalSinceReferenceDate:をオーバーライドした、指定された初期化メソッド。
暦のシステムを表すサブクラスを生成する場合、この暦の単位に分割した過去と未来の期間のメソッドを定義する必要があります。
何故なら、NSDateクラスはNSCopyingとNSCodingのプロトコルを採用しており、サブクラスはこれらのプロトコルを全てのメソッドで実装する必要があるためです。
特別な考慮事項
サブクラスはNSDateの使う絶対参照日(2001年1月1日 GMT)と異なる参照日を使う事ができます。
その場合はメソッドを実装する際に、timeIntervalSinceReferenceDateとinitWithTimeIntervalSinceReferenceDate:を使って絶対参照日を設定します。
この参照日は、メソッドのタイトルの中で参照できる絶対参照日です。
これらのメソッド内で絶対参照日を使用しない場合、生成したサブクラスのNSDateオブジェクトとプライベートサブクラスのNSDateオブジェクトの比較は動作しません。
●タスク
●日付オブジェクトの生成と初期化
+ date
+ dateWithTimeIntervalSinceNow:
+ dateWithTimeInterval:sinceDate:
+ dateWithTimeIntervalSinceReferenceDate:
+ dateWithTimeIntervalSince1970:
– init
– initWithTimeIntervalSinceNow:
– initWithTimeInterval:sinceDate:
– initWithTimeIntervalSinceReferenceDate:
– initWithTimeIntervalSince1970:
●時間の境界の取得
+ distantFuture
+ distantPast
●日付の比較
– isEqualToDate:
– earlierDate:
– laterDate:
– compare:
●時間間隔の取得
– timeIntervalSinceDate:
– timeIntervalSinceNow
+ timeIntervalSinceReferenceDate
– timeIntervalSinceReferenceDate
– timeIntervalSince1970
●時間間隔の追加
– dateByAddingTimeInterval:
– addTimeInterval:
●文字列としての日付の表現
– description
– descriptionWithLocale:
●クラスメソッド
・date
+ (id)date
現在の日付と時間の新しい日付セットを生成して返します。
このメソッドはデフォルトの初期化メソッドとして、このクラスのinitを使用します。
以下にdateメソッドを使用した、現在時刻を取得するサンプルコードを示します。
NSDate *today = [NSDate date];
・dateWithTimeIntervalSince1970:
+ (id)dateWithTimeIntervalSince1970:(NSTimeInterval)seconds
リファレンス(1970年1月1日0時0分0秒(GMT))に指定した秒数を加えたNSDateオブジェクトセットを作成し、返します。
このメソッドは、BSDシステムから返されるtime_t値からNSDateオブジェクトを作成する際に役立ちます。
seconds:リファレンスの日時に加える秒数を指定します。
現在の日時より以前の日時を得る場合は、負の値を指定します。
・dateWithTimeIntervalSinceNow:
+ (id)dateWithTimeIntervalSinceNow:(NSTimeInterval)seconds
現在の日時に指定した秒数を加えたNSDateオブジェクトセットを作成し、返します。
seconds:現在の日時に加える秒数を指定します。
現在の日時より以前の日時を得る場合は、負の値を指定します。
・timeIntervalSinceReferenceDate
+ (NSTimeInterval)timeIntervalSinceReferenceDate
2001年1月1日 GMTから現在までの経過秒数を返します。
戻り値は現在の日時とシステムの絶対参照日(2001年1月1日 GMT)との期間です。
このメソッドはNSDateの基本メソッドです。
NSDateをサブクラス化する際は、このメソッドをオーバーライドして独自の実装をしてください。
●インスタンスメソッド
・timeIntervalSinceReferenceDate
- (NSTimeInterval)timeIntervalSinceReferenceDate
2001年1月1日 GMTからレシーバまでの経過秒数を返します。
戻り値はレシーバとシステムの絶対参照日(2001年1月1日 GMT)との期間です。
レシーバが絶対参照日以前の場合、戻り値は負になります。
●定数
●通知
参考文献
・NSDate Class Reference