0

私のコードは以下のようなものです

NSDateComponents *components = [[NSDateComponents alloc] init];
components.year = [aDay.year intValue];   // 2012
components.month = [aDay.month intValue]; // 2
components.day = [aDay.day intValue];  // 1
components.hour = components.minute = components.second = 0;
NSDate *now = [self.calender dateFromComponents:components];

self.calendar については、次の 2 つの方法の両方を試しました。

self.calendar = [NSCalendar currentCalendar];
self.calender = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

しかし、この後、「今」の日付を印刷すると、常に次のようになります。

(gdb) po now
2012-01-31 16:00:00 +0000

「今」の日付は 2012-02-01 00:00:00 であるはずです

どうやら8時間の違いがあり、私は今中国にいるので、+0800のタイムゾーンにいると思いますか?

この問題を解決するにはどうすればよいですか? timeZone を処理する必要がありますか?

どうもありがとう!

4

2 に答える 2

1

では、タイムゾーンをお好みに設定してみてはいかがでしょうか。

NSTimeZone *zone = [NSTimeZone timeZoneWithName:@"PST"];
[calendar setTimeZone:zone];

既知のタイム ゾーンのリストは、次の方法で表示できます。

NSArray *timezones = [NSTimeZone knownTimeZoneNames];
NSLog(@"%@", timezones);
于 2012-02-01T05:02:19.303 に答える
0

私はこれを理解しました。

NSDate は絶対時間を保存するため、表示される内容は正しいため、タイム ゾーンは常に +0000 です。

NSDate などの compare: メソッドが必要なため、この方法を維持することをお勧めします。

唯一の違いは、ユーザーが絶対日付をローカル日付の読み取り可能な文字列に変換する場合です。

于 2012-02-03T05:41:14.107 に答える