4

私はこのコードを持っています:

NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setYear:2011];
[components setDay:1];
[components setMonth:4];
NSCalendar *gregorianCalendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *firstDate = [gregorianCalendar dateFromComponents:components];
NSLog(@"date:%@", firstDate);

コンソールの結果は次のとおりです。

date:2011-03-31

どうして????「setDay:1」を設定すると、「date:2011-04-01」になりますよね?

4

3 に答える 3

2

これはタイムゾーンに関連する問題である可能性があると思います。NSDateComponents でタイムゾーンを設定してください:

[ components setTimeZone:[ NSTimeZone systemTimeZone ] ] ;
于 2011-05-04T17:23:46.877 に答える
1

また、日付のフォーマットにも依存します。私の日付は1歳でしたが、 (小文字)YYYYに変更して修正しました。yyyy気をつけて。

于 2012-10-20T18:29:28.653 に答える
0

試す:

   [components setWeekdayOrdinal:1]; // The first day in the month

NSDateComponentsドキュメントから:

NSDateComponentsのインスタンスを構成して日付のコンポーネントを指定してから、NSCalendarメソッドdateFromComponents:を使用して対応する日付オブジェクトを作成できます。必要な数のコンポーネントを提供できます(または選択できます)。絶対時間を計算するための不完全な情報がある場合、通常、0や1などのデフォルト値がカレンダーによって選択されますが、これはカレンダー固有の選択です。一貫性のない情報を提供すると、カレンダー固有の曖昧性解消が実行されます(これには、1つ以上のパラメーターの無視が含まれる場合があります)。

于 2011-05-04T17:52:33.793 に答える