予期しない日付を返すNSCalendarとNSDateComponents

私はNSCalendarとNSDateComponentsからNSDateを作成しようとしています:

    NSCalendar *calendar = [NSCalendar currentCalendar];
    [calendar setTimeZone:[NSTimeZone localTimeZone]]; 
    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setDay:[self.day intValue]];
    [components setMonth:[self.month intValue]];
    [components setYear:[self.year intValue]];
    self.date = [calendar dateFromComponents:components];

日、月、年が: 2011年9月31日の場合、NSDateは 2011年10月1日です。 NSDateを変更しなかったテストの後、NSCalendarのタイムゾーンを設定しました。私もやった

[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];

これは 2011年9月30日に戻ってきました。私はこれを計算している方法で誰もがエラーを参照してください?

ありがとう。

0
追加された
ビュー: 1

1 答え

さて、9月31日は本当に10月初めです。

しかし、コンポーネントはどのカレンダーで動作するかを知っていなければなりません。次のコードはappleのものです

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:6];
[comps setMonth:5];
[comps setYear:2004];
NSCalendar *gregorian = [[NSCalendar alloc]
    initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:comps];
[comps release];
3
追加された
追加された 著者 giuseppe,