web-dev-qa-db-ja.com

NSDateFormatterとタイムゾーンの問題?

GMTの時刻の文字列があり、システムのタイムゾーンに従ってそれを作成したいのですが、正しく機能していません-

NSLog(@"Time Str = %@",Time);

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd-MM-yyyy hh:mm a"];

[NSTimeZone resetSystemTimeZone];

NSLog(@"system time zone = %@",[NSTimeZone systemTimeZone]);

[dateFormat setTimeZone:[NSTimeZone systemTimeZone]];

NSDate *date = [dateFormat dateFromString:Time];

[dateFormat setTimeZone:[NSTimeZone systemTimeZone]];
NSLog(@"date from string = %@",date);
NSLog(@"string from date = %@",[dateFormat stringFromDate:date]);

コンソールでの出力-

////////////////////////////////////////////////// //////////////////////////////////////////////

時間Str = 09-12-2011 07:57 AM

システムタイムゾーン= Asia/Calcutta(IST)オフセット19800

文字列からの日付= 2011-12-09 02:27:00 +0000

日付からの文字列= 09-12-2011 07:57 AM

////////////////////////////////////////////////// //////////////////////////////////////////////

カルカッタはGMTから+5:30なので、日付の時刻は1:27になるはずですが、02:27と表示されます。また、この日付から文字列を取得すると、日付を作成するために使用したものと同じ文字列が表示されるので、システムのタイムゾーンに従って文字列を更新します。

ありがとう

19
saadnib

日付文字列がGMTの場合、システムのタイムゾーンを使用してNSStringからNSDateを作成することはできません。

最初に出現する[dateFormat setTimeZone:[NSTimeZone systemTimeZone]];を置き換える

[dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];

51
Matthias Bauch