2016-06-30 5 views
1

この問題は、正しい時刻が過ぎたところで発生していますが、[formatter setDateFormat:date]に当たったら、別のタイムゾーンで表示されます。ここではここObjective-Cの時刻を現地時刻に変換する

NSDate* date = user.startDate; 
NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
NSLog(@"-------> (1) time is %@", date); 
NSLog(@"-------> (2) time is %@", date); 
[format setDateFormat:@"h:mm a"]; 
NSLog(@"-------> (3) time is %@", date); 
NSLog(@"-------> (4) time is %@", [format stringFromDate:date]); 

は、ログメッセージ

-------> (1) time is 2016-06-30 09:25:17 +0000 
-------> (2) time is 2016-06-30 09:25:17 +0000 
-------> (3) time is 2016-06-30 09:25:17 +0000 
-------> (4) time is 2:25 AM 

ためのデバッガ出力は、私がtime is 9:25 AM

+0

あなたの質問とは関係のないコードを削除しました(しかし、回答の中の参照が有効であるように重複した行を残しておきます)。 – Eiko

+0

(1)、(2)、(3)はちょうど正確な事をしていることに注意してください。日付は不変で、同じインスタンスであり、フォーマッタを使用していません。 – Eiko

答えて

1

あなたのタイムゾーンは明らかにUTC-7000です。

オブジェクトは常にUTCで表示され、NSDateFormatterは現在のタイムゾーンを考慮します。実際に印刷された日付は同じです。

実際にすべての日付がUTCで必要な場合は、フォーマッタのタイムゾーンを設定します。ところで

format.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 

:日付は今日か昨日であるかどうかを確認するために、組み込みの方法があります。

1

する(4)のための出力を期待していている。ここで何が起こっているのか抜粋ですされています。ログには、の日付は常にGMTになります。 (私には大きな詳細があるので、詳細に入るのは意味がないと思う。here。)つまり、ログ1,2および3は「間違っている」(あなたのタイムゾーンではない)ことを意味する。

たとえば、文字列をGMTとしてログに記録する場合は、日付フォーマッタのプロパティtimeZoneを変更できます。

日付の処理は非常に困難です。 this文書のいくつかの重要な部分(基本/基本)をすべて読んでください。

関連する問題