我正在从我的web服务中加载日期,我以格式(GMT时间)发送日期:02/11/11 10:56:09
我正在使用NSDateFormatter创建一个NSDate表单,如下所示:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
NSDate *journeyDate = [dateFormatter dateFromString:str];
[dateFormatter release];
这工作得很好,在我将其与当前日期进行比较以获得相对时间间隔之后。
问题是当手机设置在不同的时区时,当我从我的api加载日期,并使用日期格式化器,似乎正在发生的是手机假设日期字符串是当地时间,它将其转换为GMT。
的例子:
我从api加载一个时间为上午10点的日期。话机已设置为PDT模式。日期格式化程序正在创建一个NSDate,假设我的日期字符串与上午10点,实际上与电话相关。
最后得到的日期和时间等于下午5点,加上10个小时。
我试图在我的日期格式化程序中指定字符串是GMT,但我遇到了麻烦,我尝试了以下方法,将GMT添加到格式:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss GMT"];
NSDate *journeyDate = [dateFormatter dateFromString:str];
[dateFormatter release];
这是不工作。
谁能给点建议?
解决方案只是回顾一下,我通过将GMT附加到原始字符串并格式化为:
,使它能够工作。NSString * cheat = [NSString stringWithFormat:@"%@ GMT", str];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss zzzz"];
NSDate *journeyDate = [dateFormatter dateFromString:cheat];
[dateFormatter release];
return journeyDate;
这是一种不稳定的hack,因为如果字符串更改为包含时区,它将不再工作。对于任何需要像我这样做的人,下面只是一个关于如何创建NSTimeZone的快速示例。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
NSDate *journeyDate = [dateFormatter dateFromString:str];
[dateFormatter release];
return journeyDate;
感谢您的快速帮助。
我怀疑你只是想使用NSDateFormatter。setTimeZone强制使用UTC。您不希望更改格式字符串,因为该字符串可能不包含字母"GMT" -相反,您希望更改解释字符串的时区,这就是setTimeZone
将做的。
您应该使用setTimeZone方法:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html