/ / NSTimezoneが適切に設定されていても、NSDateFormatterの結果の問題が発生するのはなぜですか? -iphone、objective-c、ios、nsdate、nsdateformatter

NSTimezoneが正しく設定されていてもNSDateFormatterの結果が問題になるのはなぜですか? - iPhone、Objective-C、IOS、nsdate、nsdateformatter

結果はまだ前日です。NSTimeZoneが適切に設定されており、私の国(イタリア、ローマ)に適しているため、理由を自問しています。 これが私のコードのスタブです、何かアイデアはありますか?

    NSString *dateString = @"03/07/2008";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setFormatterBehavior:[NSDateFormatter defaultFormatterBehavior]];
[formatter setDateFormat:@"dd/MM/yyyy"];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setTimeZone:[NSTimeZone systemTimeZone]];
NSDate *dateFromString = [formatter dateFromString:dateString];
[formatter release];

dateFromStringの結果はこれです 2008-07-02 22:00:00 +0000.

私は他の解決策を探しましたが、一般的な答えはタイムゾーンを正しく設定することでした。私の場合は正しく設定されていますが、問題はまだ残っています。

回答:

回答№1は6

デフォルトでは NSDate 説明にUTC日付を返します +0000。 UTCより数時間進んでいるため、前日の22:00:00になります。私は-5で、UTCの結果は 2008-07-03 04:00:00 +0000 (DST)。日付は正しいです。UTCで表示されているだけです。どこかで正しく表示しようとしている場合は、日付フォーマッターを使用して文字列を再度取得してください。

...
NSDate *dateFromString = [formatter dateFromString:dateString];
NSString *stringFromDate = [formatter stringFromDate:dateFromString];
[formatter release];

NSLog(@"%@ : %@", dateFromString, stringFromDate);

2008-07-03 04:00:00 +0000:2008年3月7日