0

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日を返しました。誰かが私がこれを計算している方法でエラーを見ますか?

ありがとう。

4

1 に答える 1

3

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

ただし、コンポーネントは、どのカレンダーで機能するかを認識している必要があります。次のコードはアップルからのものです

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];
于 2011-11-12T01:04:03.297 に答える