NSDateFormatter和时区问题?

19

我有一个包含GMT时间的字符串,我想将它转换为系统时区的时间,但是转换结果不正确 -

NSLog(@"Time Str = %@",Time);

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"dd-MM-yyyy hh:mm a"];

[NSTimeZone resetSystemTimeZone];

NSLog(@"system time zone = %@",[NSTimeZone systemTimeZone]);

[dateFormat setTimeZone:[NSTimeZone systemTimeZone]];

NSDate *date = [dateFormat dateFromString:Time];

[dateFormat setTimeZone:[NSTimeZone systemTimeZone]];
NSLog(@"date from string = %@",date);
NSLog(@"string from date = %@",[dateFormat stringFromDate:date]);

在控制台输出 -

////////////////////////////////////////////////////////////////////////////////////////////////

时间字符串 = 09-12-2011 07:57 AM

系统时区 = Asia/Calcutta (IST),偏移量为19800

从字符串获取的日期 = 2011-12-09 02:27:00 +0000

从日期获取的字符串 = 09-12-2011 07:57 AM

////////////////////////////////////////////////////////////////////////////////////////////////

加尔各答比格林尼治标准时间快5小时30分钟,所以日期中的时间应该是1:27,但实际显示的是02:27。当我从这个日期中取一个字符串时,它显示的是我用来制作日期的同样的字符串,我希望根据系统时区更新字符串。

谢谢


应该是02:27,因为7:57 - 5:30 = 2:27,而不是1:27。 - Alexander Volkov
1个回答

52
如果日期字符串是GMT格式,您不能使用系统时区来从NSString创建NSDate对象。
请用[dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];替换第一次出现的[dateFormat setTimeZone:[NSTimeZone systemTimeZone]];

9
如果我希望我的应用程序能够在任何时区的任何地方运作,我应该怎么做? - S.J
你需要使用标准的GMT时区,并根据要求将其转换为本地时区。 - Aashish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接