-1


0

NSDateをdefaulttimezoneで出力する方法は?

defaulttimezoneで現在の日付と時刻を出力するにはどうすればよいですか? 次のコードを使用すると、常にGMTで時刻が取得されます。 NSDateをdefaulttimezoneに変換することは可能ですか? 正しい時刻のNSDateオブジェクトが必要なため、NSDateFormatterを使用できません。

NSDate *date = [NSDate date];
NSLog(@"Time: %@", date);

出力:2010-09-26 12:07:12 TimeTest [2641:207]時間:2010-09-26 12:07:12 GMT

*更新:*適切な時間でNSDateオブジェクトを返す必要がある場合、NSDateFormatterをsetTimeZoneで使用するにはどうすればよいですか?

 NSDate* date = [NSDate date];

 NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
 [formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
 NSTimeZone *tz = [NSTimeZone timeZoneWithName:@"MESZ"];
 [formatter setTimeZone:tz];

 NSString *datestr = [formatter stringFromDate:date];
 NSLog(@"%@", datestr);

 NSDate *datenew = [formatter dateFromString:str];
 NSLog(@"%@", datenew);

最初のNSLogは正しい時刻を出力しますが、正しい時刻でNSDateオブジェクトを作成したい場合、間違った時刻を再度取得します。

2 Answer


2


_ 正しい時刻のNSDateオブジェクトが必要なため、NSDateFormatterを使用できません。 _

それは意味がありません。 「NSDate」は単一の時点を表します。 タイムゾーンを認識せず、気にしません。 たとえば、今日の12:00 GMTと今日の06:00 –0600は、1つの同じ `NSDate`オブジェクトで表されます。

特定のタイムゾーンで日付を表示するには、 NSDateFormatter、具体的には` setTimeZone: `メソッドを使用します。


1


現在の時刻([NSDate date])が必要な場合がありますが、タイムゾーンに変換し、ユーザー用にそのようにフォーマットするだけでなく、それを使用して計算を行います。 私はこの簡単な解決策を思いつきました:

double timeDifference = [[NSTimeZone systemTimeZone] secondsFromGMT];
double now = [[NSDate date] timeIntervalSince1970] + timeDifference;

私のタイムゾーンで現在のtimeIntervalを取得するのに便利です。 私の場合、日付はすべて非常に柔軟で動的であり、カレンダーにリンクされていません。 開始時間に関連する時間で作業していました。

説明するのは難しいです。 とにかく、おそらくこの記事で終わった私の問題を抱えている人々の何人かは、彼らの答えも持っているでしょう。