2011-11-02 87 views
0

我加载从我的web服务枣,我送日期格式(GMT时间):02/11/11 10点56分09秒创建NSDate的时区问题

我创建一个NSDate形式这种使用NSDateFormatter这样:

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,假定我的日期字符串为10am,实际上与手机相关。

我最终的日期和时间等于下午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; 

这是一种不稳定的黑客攻击,因为如果字符串更改为包含时区,则不再有效。对于任何需要我自己做的人来说,以下仅仅是一个关于如何创建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; 

感谢您的快速帮助。

回答

1

我怀疑你只是想用NSDateFormatter.setTimeZone强制它使用UTC。您不希望更改格式字符串,因为大概字符串不包含字母“GMT” - 相反,您想要更改哪个时区字符串被解释,这是setTimeZone将执行的操作。