将来会返回一个小时的日期

ben*_*ink 0 iphone nsdate

我正在使用当前的日期/时间[NSDate date].返回的值是将来一小时.我检查了我的手机位置和时间设置,它们是正确的.

我可以使用下面的代码将正确的日期和时间显示为字符串.

[NSDateFormatter localizedStringFromDate:[NSDate date] dateStyle:NSDateFormatterShortStyle 
                                                       timeStyle:NSDateFormatterShortStyle]
Run Code Online (Sandbox Code Playgroud)

但我需要它将正确的日期/时间作为日期对象返回,因为我使用它来计算预计到达时间 -

[date dateByAddingTimeInterval:interval]
Run Code Online (Sandbox Code Playgroud)

我意识到我的问题类似于已经问过的问题,但没有一个答案符合我的需要.提前致谢!

init]过去一小时返回日期?

Mat*_*uch 15

也许你会混淆时间点(即NSDate对象)和你所在位置的时间点(即当地时间).

如果您打印NSDate(如NSLog(@"%@", [NSDate date]);调用[date description]),则打印的日期表示形式为UTC时区(+0000)(至少它在我的计算机上).
因此,只要您不居住在使用UTC的区域,就可以使用[日期描述]打印的日期; 永远是"错误的".但错误只意味着它的表现形式与办公室中的时钟不同.日期(如时间点)仍然正确.

使用时,localizedStringFromDate:dateStyle:timeStyle:您将在当地时区打印日期.

NSDate *date = [NSDate date];
NSLog(@"%@", date);
NSLog(@"%@", [NSDateFormatter localizedStringFromDate:date dateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterShortStyle]);
Run Code Online (Sandbox Code Playgroud)

在我的电脑上,这导致:

2011-02-12 08:32:10.658 x[75647:207] Date: 2011-02-12 07:32:10 +0000
2011-02-12 08:32:10.661 x[75647:207] Date: Saturday, February 12, 2011 8:32:10 AM Central European Time
Run Code Online (Sandbox Code Playgroud)

打印的字符串不同,但NSDate对象仍然相同.这就是为什么在向用户显示日期时必须使用NSDateFormatters的原因.因为同一时间点在世界不同的地方看起来不同.


但是,将来只有三个地方的UTC格式化日期将是一个小时,所以如果你不住在格陵兰岛,佛得角或亚速尔群岛,我可能完全错了,你的NSDate对象有问题.


编辑:出于好奇,我再次阅读有关[日期描述]的文档.它说

接收器的字符串表示形式,国际格式为YYYY-MM-DD HH:MM:SS±HHMM,其中±HHMM表示从GMT开始的小时和分钟的时区偏移(例如,"2001-03-24 10:45" :32 +0600").

所以我不知道为什么计算机上的日期是用GMT时区打印的.它可能位于您计算机的另一个时区.
但是,它只是表示,日期仍然相同.