9
NSDate *date = [NSDate dateWithTimeIntervalSince1970:timestamp];
NSDateFormatter *_dateFormatter = [[NSDateFormatter alloc] init];
[_dateFormatter setTimeZone:[NSTimeZone defaultTimeZone]];
[_dateFormatter setDateFormat:@"dd-MM-yy HH:mm"];
NSString *dateString = [_dateFormatter stringFromDate:date];
NSLog(@"Date: %@ formatted: %@", date, dateString);
[_dateFormatter release];

間違った日付のフォーマットが表示されます:

日付: 2013-01-31 18:00:00 +0000 形式: 31-01-13 19:00 (タイムスタンプから: 1359655200.000000)

オンライン変換ツール: http://www.onlineconversion.com/unix_time.htmは、最初の日付が正しいことを示しています: 2013-01-31 18:00:00 +0000.

NSDateFormatter が NSLog と異なる日付を生成するのはなぜですか? [NSDate description]コンソールに出力するときに defaultTimeZone を使用すべきではありませんか? [_dateFormatter setTimeZone:[NSTimeZone localTimeZone]];で同じエラーが発生します。そして[_dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];

4

2 に答える 2

19

これは正しい動作です。理由は次のとおりです。

  1. [NSDate description]ローカル タイム ゾーンではなく、UTC を使用します (+0000説明に があるのはそのためです)。
  2. NSDateFormatterローカル タイム ゾーンを使用しています。
  3. あなたはデンマークにいます。デンマークのローカル タイム ゾーンは中央ヨーロッパ時間で、現在は UTC プラス 1 時間です。

これらが一致する唯一の方法は、NSDateFormatterUTC を使用するように指示した場合です。ただし、それはあなたが望むものではないかもしれません。

于 2013-05-23T17:02:20.597 に答える
-1

あなたが発見したのはタイムゾーンの問題です。デフォルトのタイム ゾーンは、システムのタイム ゾーンを使用します。たとえば、GMT+1 にいる場合、19-00 になるはずです。使用したコンバーターは GMT 時間を提供します。

時間固有のタイムゾーンが必要で、GMT からのオフセットがわかっている場合は、次を使用できます。

    [_dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:2*60*60]];//GMT+2.0

これで問題が解決することを願っています。

于 2013-05-23T15:23:28.997 に答える