1. ホーム
  2. オブジェクティブC

[解決済み】NSDateで年/月/日を取得する。

2022-03-30 01:19:30

質問

の年/月/日を取得するにはどうすればよいですか? NSDate オブジェクトを、他の情報がない場合に使用できますか?私は、おそらくこれに似たようなものでこれを行うことができることを理解しています。

NSCalendar *cal = [[NSCalendar alloc] init];
NSDateComponents *components = [cal components:0 fromDate:date];
int year = [components year];
int month = [components month];
int day = [components day];

しかし、これではせっかく NSDate の年/月/日です。他に解決策はないのでしょうか?

どのように解決するのですか?

この回答はどうやら一番人気があるようなので、もう少し情報を盛り込むように編集してみることにします。

その名前とは裏腹に NSDate それ自体は、日付ではなく、単に機械時間における点をマークしています。で指定された時刻の間に相関関係はありません。 NSDate と年、月、日などです。そのためには、カレンダーを参照する必要があります。どの時点でも、どの暦を参照しているかによって異なる日付情報を返します(たとえば、グレゴリオ暦とユダヤ暦の両方で日付は同じではありません)。 NSDate は常にそれを使用する必要があります。 NSDate 幸いなことに、超党派の方がはるかに多いのです。


日付と時刻の取得は通過しなければならない NSCalendar しかし、もっと簡単な方法があります。

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];

これは NSDateComponents オブジェクトを作成します。このオブジェクトには、現在のシステムカレンダーの日、月、および年が含まれます。( これは必ずしも現在の ユーザー指定の カレンダーはデフォルトのシステムカレンダーです)。

もちろん、別のカレンダーや日付を使用している場合は、簡単に変更することができます。利用可能なカレンダーとカレンダーの単位の一覧は NSCalendar クラスリファレンス . の詳細については、こちらをご覧ください。 NSDateComponents NSDateComponents クラスリファレンス .


参考までに、個々のコンポーネントにアクセスする場合は NSDateComponents は割と簡単です。

NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];

心していればいいんです。 NSDateComponents は、有効な情報を使ってフィールドを生成しない限り、要求したフィールドの有効な情報を含みません (つまり、リクエストした NSCalendar でその情報を提供します。 NSCalendarUnit s). NSDateComponents それ自体は参照情報を持たず、アクセスするための番号を保持する単純な構造体です。例えば、時代も取得したいのであれば NSDateComponents のジェネレータメソッドに入力する必要があります。 NSCalendar を使用して NSCalendarUnitEra のフラグを立てます。