创建NSDate时区问题



我正在从我的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

相关内容

  • 没有找到相关文章