2011-09-16 5 views
3

私は次のコードを実行します:NSDateは5時間オフです

NSDate * now = [NSDate date];

NSLog(@"now: %@", now); 

とget:

2011-09-16 16:14:16.434 iSavemore [1229:7907]を今すぐ:あなたとして2011年9月16日午前21時14分16秒0000

私は16時14分16秒(午後4時14分)にこれを実行していることがわかりますが、NSDateは21:16:16(午後9時14分)です。これはXcode4の問題かNSDateの問題ですか?

+0

これはデバイス上またはシミュレータ上にありますか? – DarkDust

答えて

9

NSDateのデフォルト例えば、あなたの必要性をフィットされるものに、あなたのNSDateのタイムゾーンを設定してみてください。

あなたはUTCの5時間遅れの東海岸のどこかにいると思います。

は...あなたの日付フォーマッタにこれを追加すること

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

[dateFormatter setLocale:[NSLocale currentLocale]]; 

をお試しください...そして、あなたのローカルタイムが表示されるはずです。

'currentLocale'ではなく、指定されたロケールを使用する場合は、該当するロケールのNSLocaleを作成します。

NSLocale *usLoc = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 

[dateFormatter setLocale:usLoc]; 

...実際には米国です(これはおそらくセントラルではありません)。より具体的なタイムゾーンのヘルプはここで見つけることができ

あなたは有効期限の時刻を表示したい場合は...

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html

はしかし、あなたはまだ、ユーザーのcurrentLocaleでそれを望んでいないでしょうか?

+0

私はセントラルタイムゾーンにあり、NSDateを強制的に強制的に中央の原因にする必要があります。有効期限を計算しなければなりません。ユーザーがどこにいるかにかかわらず、ダラスに基づいています。それ、どうやったら出来るの? –

+0

私はそれを助けるために上記の私の答えを編集しました。 – Snips

-1

こちらはちょっと野生のものですが、タイムゾーンとは何か関係がありますか?

0

は、ユニバーサルタイムゾーン(別名GMT)に[NSTimeZone localTimeZone]

5

あなたは出力を見れば、あなたは、ログにはタイムゾーンが含まれていることがわかります:

2011-09-16 16:14:16.434 iSavemore[1229:7907] now: 2011-09-16 21:14:16 +0000 
                     ^^^^^^ 

ログのタイムスタンプは現地時間です。私はあなたがUTCより5時間早いタイムゾーンにいると仮定します。

NSDateは特定の時点を指します。あなたが望むのにこれを表示するのはあなた次第です。通常はNSDateFormatterを使用します。

これは、時間や日付をNSDate以外のものとして保存することに対する多くの推奨事項が表示される理由です。あなたが文字列として試して保存しようとすると、後で別のタイムゾーンでディスプレイを扱おうとするときに大きな問題に遭遇します。

関連する問題