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

结果没问题。两个日期都是相同的,只是在将字符串解析为 之后NSDateNSLog使用本地区域打印您的输出。

请参阅:您在解析日期中有10:30 + 2h字符串和时区偏移量。9:30 + 1h这意味着两个日期都是8:30 GMT

编辑澄清:

NSDate是独立于时区的日期表示。因此,解析NSDate实例的内部表示正确地描述了输入字符串中的日期,您可以安全地使用日期进行计算等。这仅取决于最终字符串是如何创建的NSDateFormatter。默认情况下,它会在您的本地时区创建字符串。这就是为什么您的输出与输入的字符串不完全相同的原因。但是如果你计算小时+时区偏移量,它是正确的。

如果您确实需要具有相同的输出字符串,则必须显式设置NSDateFormatters 时区或NSLocale与输入日期字符串具有相同的时区(某些语言环境/时区,时区偏移量为 +2 GMT

于 2013-05-31T13:16:42.410 回答
2

时区会造成麻烦

[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT+0:00"]];

或者

[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
于 2013-05-31T13:16:01.640 回答
0

时间是一样的,只是时区不同,设置你约会的时区即可:

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