1

NSDateFormatter から奇妙な出力が得られます。日付を GMT からシステム タイム ゾーン (EDT) に変換しています。これは GMT から -4 時間のはずです。

-(NSDate*)parseDate:(NSString*)inStrDate {

NSLog(@"Date To Parse %@", inStrDate);
NSDateFormatter* dtFormatter = [[NSDateFormatter alloc] init];
[dtFormatter setLocale:[NSLocale systemLocale]];
[dtFormatter setTimeZone:[NSTimeZone systemTimeZone]];
[dtFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss +0000"];
NSDate* dateOutput = [dtFormatter dateFromString:inStrDate];
NSLog(@"Parsed Date %@ %@", dateOutput, [NSTimeZone systemTimeZone]);

return dateOutput;

}

ログ出力:

2012-09-15 22:32:53.358 解析する日付 2012-09-16 02:32:53 +0000 2012-09-15 22:32:53.360 解析された日付 2012-09-16 06:32:53 +0000 アメリカ/New_York (EDT) オフセット -14400 (昼光)

しかし、-4 ではなく +4 時間を返しています。したがって、22.30 EDT (02.30 GMT) を出力するはずの場所に、実際には 06.30 EDT が返されます。これは8時間後の未来です。

ここのどこかで間違っているかどうかを理解してくれる人はいますか? 頭を悩ませていますが、なぜこれが機能しないように見えるのかわかりません。

ありがとう

4

2 に答える 2

2

dateFormatter を間違った方法で取得しただけです。あなたがするとき

[dtFormatter setTimeZone:[NSTimeZone systemTimeZone]];

入力日付がタイムゾーンに基づいていることを伝えています。したがって、GMT に変換し、時刻 +4 時間を出力します。これを逆にするには、次のようにします。

NSDateFormatter* df_local = [[NSDateFormatter alloc] init];
[df_local setTimeZone:[NSTimeZone timeZoneWithName:@"America/New_York"]];
[df_local setDateFormat:@"yyyy.MM.dd' 'HH:mm:ss zzz"];

NSDate* dateOutput = [dtFormatter dateFromString:dateString];
NSLog(@"Parsed Date in GMT %@", dateOutput);
NSString *yourLocalDate = [df_local stringFromDate:dateOutput];
NSLog(@"in EDT %@",yourLocalDate);

これはログに記録します

2012-09-16 05:23:53.297 TestingApplication[10109:c07] Date To Parse 2012-09-16 02:32:53 +0000
2012-09-16 05:23:53.302 TestingApplication[10109:c07] Parsed Date in GMT 2012-09-16 02:32:53 +0000
2012-09-16 05:23:53.304 TestingApplication[10109:c07] in EDT 2012.09.15 22:32:53 EDT
于 2012-09-16T03:14:24.353 に答える
1

最終出力として日付が必要な場合は、セカンダリ NSDateFormatter をスキップして、UTC 日付と現地時間の差を「追加」するだけです。

formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];        
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"];
NSDate *date = [formatter dateFromString:dateString]; // UTC date
NSDate *date2 = [date dateByAddingTimeInterval:[[NSTimeZone localTimeZone] secondsFromGMTForDate:date]]; // local date!
于 2012-10-01T18:43:58.503 に答える