我有以下代码
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显示?!!!
答案 0 :(得分:2)
时区会造成麻烦
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT+0:00"]];
或
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
答案 1 :(得分:2)
结果还可以。这两个日期都是相同的,在将字符串解析为NSDate
之后,NSLog
会打印出您当地区域的输出。
请参阅:您在解析日期中有10:30 + 2h
字符串和9:30 + 1h
时区偏移量。这意味着两个日期都是8:30 GMT
编辑以澄清:
NSDate
是独立于时区的日期表示。因此,解析后的NSDate
实例的内部表示正确地描述了输入字符串中的日期,您可以安全地使用日期进行计算等。它只取决于NSDateFormatter
创建最终字符串的方式。默认情况下,它会在您的本地时区创建字符串。这就是为什么你的输出与输入不完全相同的字符串。但是如果你计算小时+时区偏移量,那是正确的。
如果您确实需要具有相同的输出字符串,则必须将NSDateFormatter
的时区或NSLocale
显式设置为与输入日期字符串相同的时区(某些区域设置/时区带有时区)来自GMT
)的偏移量+2
答案 2 :(得分:0)
时间是一样的,它只是一个不同的时区,只需设置你的日期时区:
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];