-1

我知道 NSDate 没有时区信息。

但是,我正在尝试了解如何正确操作它们。

目前我正在将日期传递给一个对象。该日期是用户在时间 00:00:00 选择的日期。

即,如果用户点击 10 月 21 日,那么传入的 NSDate 应该是。21/10/2013 00:00:00。

但是,它不是 20/10/2013 23:00:00。(一小时前)。

现在,这与格式化或显示它们无关。我只是在使用 NSDates。

我正在使用NSDateComponentsand创建日期NSCalendar

我想我的问题是...

如何判断 anNSDate在我当地时区实际指的是哪个日期?

我需要为给定日期发送 00:00:00 和 23:59:59 的 UNIX 时间戳。但是,当我将小时、分钟和秒设置为 0、0 和 0 时,我在当前时区没有到达午夜,而在 GMT 中我正在到达午夜。

这不是我想要的。

固定的?

好的,我已经修好了……我想。至少,它正在做我想让它做的事情。

诀窍是...

NSTimeZone *timeZone = [NSTimeZone localTimeZone];
[dateComponents setSecond:timeZone.secondsFromGMT];
4

1 回答 1

3

我为此困惑过很多次。当你NSLog是一个 NSDate 时,你总是会得到 GMT 的输出。因此,您看到的 20/10/2013 23:00:00 (GMT)预期的 21/10/2013 00:00:00 (BST) 相同。这两个日期的 UNIX 时间戳将是相同的,因为它不考虑时区 - 它始终是 UTC。

如果您想以用户可读的格式输出,anNSDateFormatter将使用您当前的时区和区域设置格式化日期。

于 2013-10-21T16:00:14.747 回答