1

日付から YEAR、MONTH、および DAY コンポーネントを使用して新しいものを作成することにより、日付の時刻を 0 時間 0 分 0 秒に設定する次のコードがあります。

NSDate *date = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit) fromDate:date];
NSDate *newDate = [gregorian dateFromComponents:comps];
NSLog(@"date: %@, newDate: %@", date, newDate);

出力は次のとおりです。

date: 2012-11-06 11:44:09 +0000, newDate: 2012-11-05 23:00:00 +0000

しかし、私は新しい日付が次のようになることを期待していました2012-11-06 00:00:00 +0000

4

2 に答える 2

1

NSLog-[NSDate description]に格納されている絶対時間を文字列に変換する日付を示しNSDateます。この変換は、タイム ゾーンとして UTC を使用して行われます。

あなたの場合、UTCでも日付計算を行うのがおそらく最善です。これを行うには、計算を行うカレンダー オブジェクトを調整します。

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
于 2012-11-06T14:26:41.650 に答える
-1

同様のStackOverflowの質問については、この回答を参照してください。

これにより、夏時間の問題が解決するはずです。

NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];

[formatter setCalendar:[NSCalendar currentCalendar]];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];

NSString *string = [formatter stringFromDate:[NSDate date]];
于 2012-11-06T12:06:00.647 に答える