0

次のコードがあります

NSString *dateString = @"2013-05-24T10:30:00+0200";
        NSLog(@"date string before format %@", dateString);
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
        NSDate *date = [dateFormatter dateFromString:dateString];
        dateString = [dateFormatter stringFromDate:date];
        NSLog(@"date string after format %@", dateString);

出力は次のとおりです。

date string before format 2013-05-24T10:30:00+0200
date string after format 2013-05-24T09:30:00+0100

10:30 と表示されてから 9:30 と表示されるのはなぜですか?!!!

4

3 に答える 3

2

結果はOKです。両方の日付は同じです。文字列を に解析した直後に、ローカル ゾーンNSDateNSLog出力を出力します。

参照:解析された日付10:30 + 2hに文字列と9:30 + 1hタイムゾーンのオフセットがあります。つまり、両方の日付が8:30 GMT

明確にするために編集:

NSDateタイムゾーンに依存しない日付表現です。したがって、解析されNSDateたインスタンスの内部表現は、入力文字列の日付を正しく記述し、計算などに日付を安全に使用できますNSDateFormatter。デフォルトでは、ローカル タイム ゾーンで文字列が作成されます。そのため、出力は入力とまったく同じ文字列ではありません。しかし、時間 + タイムゾーン オフセットを計算すれば、それは正しいです。

本当に同じ出力文字列が必要な場合は、NSDateFormatters タイム ゾーンを明示的に設定するかNSLocale、入力日付文字列と同じタイム ゾーンに設定する必要があります (タイム ゾーン オフセット +2 のロケール/タイム ゾーンGMT) 。

于 2013-05-31T13:16:42.410 に答える
0

時間は同じですが、タイムゾーンが異なるだけです。日付のタイムゾーンを設定してください:

[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
于 2013-05-31T13:16:48.413 に答える