日期和时区

时间:2011-02-03 19:24:51

标签: iphone ipad nsdate nstimezone

在我们的应用中,我们总是需要选择当前的东部时间(EST或EDT)。

我们在app delegate中设置应用程序时区如下:

NSTimeZone *ESTTimeZone = [NSTimeZone timeZoneWithName:@"US/Eastern"];
[NSTimeZone setDefaultTimeZone:ESTTimeZone];

此外,对于NSDateFormatter,我们将语言环境设置如下:

NSDateFormatter *formatForFileName  = [[NSDateFormatter alloc] init];
[formatForFileName setDateFormat:@"yyyyMMdd"];
NSLocale *uslocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[formatForFileName setLocale:uslocale];
[uslocale release];

如果我的iPad设置为更正EST日期和时间,则没有问题。如果我按如下方式记录当前日期:

NSLog(@"current date : %@",[formatForFileName stringFromDate:[NSDate date]]);

它会正确显示今天的日期。 但是,如果我将我的iPad日期更改为第二天的日期并记录当前日期,我希望返回当前的EST日期和时间。 但是,[NSDate date]会返回当前的iPad日期(第二天的日期)和时间,而不是EST的日期和时间。

无论用户在iPad上设置了什么,我都可以使用[NSDate日期]获得正确的EST日期和时间。

感谢。

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解你的问题。 [NSDate date]始终创建一个日期,其中包含操作系统认为此时有效的日期/时间,即设备的时钟设置为的时间。如果您怀疑这是否确实是当前时间,您需要联系互联网上值得信赖的时间服务器并从那里获取时间。

答案 1 :(得分:0)

[NSDate date]返回设置为当前系统日期和时间的日期。因此,当用户更改到系统上的第二天的日期时,[NSDate date]将返回第二天的日期。 NSDate假设(理所当然地)系统日期是正确的日期。

要显示实际的EST日期,您需要查询系统以外的源(远程源)以获取所需的日期。