NSDate修复时区

时间:2013-10-21 15:47:14

标签: ios objective-c nsdate nscalendar

我知道NSDate没有时区信息。

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

此刻我正在将一个日期传递给一个物体。该日期是用户在00:00:00时选择的日期。

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

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

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

我正在使用NSDateComponentsNSCalendar创建日期。

我想我的问题是......

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

我需要为给定日期发送00:00:00和23:59:59的UNIX时间戳。然而,在我将小时,分钟和秒设置为0,0和0的那一刻,我在当前时区没有午夜,我正在格林威治标准时间午夜。

这不是我想要的。

固定吗

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

诀窍是......

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

1 个答案:

答案 0 :(得分:3)

我多次被这个困惑了。当您NSLog NSDate时,您将始终以GMT获得输出。所以20/10/2013 23:00:00(格林尼治标准时间)你看到 与预期的21/10/2013 00:00:00(BST)相同。这两个日期的UNIX时间戳都是相同的,因为它没有考虑时区 - 它始终是UTC。

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