我知道NSDate没有时区信息。
但是,我正在努力了解如何正确操作它们。
此刻我正在将一个日期传递给一个物体。该日期是用户在00:00:00时选择的日期。
即。如果用户点击10月21日,那么传入的NSDate应该是。 21/10/2013 00:00:00。
但是,它不是20/10/2013 23:00:00。 (一小时前)。
现在,这与格式化或显示它们无关。我只是使用NSDates。
我正在使用NSDateComponents
和NSCalendar
创建日期。
我想我的问题是......
如何判断NSDate
在我当地时区实际指的是哪个日期?
我需要为给定日期发送00:00:00和23:59:59的UNIX时间戳。然而,在我将小时,分钟和秒设置为0,0和0的那一刻,我在当前时区没有午夜,我正在格林威治标准时间午夜。
这不是我想要的。
固定吗
好的,我已经修好了......我想。至少,它正在做我想做的事。
诀窍是......
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
[dateComponents setSecond:timeZone.secondsFromGMT];
答案 0 :(得分:3)
我多次被这个困惑了。当您NSLog
NSDate时,您将始终以GMT获得输出。所以20/10/2013 23:00:00(格林尼治标准时间)你看到 与预期的21/10/2013 00:00:00(BST)相同。这两个日期的UNIX时间戳都是相同的,因为它没有考虑时区 - 它始终是UTC。
如果您想以用户可读的格式输出,NSDateFormatter
将使用您当前的时区和区域设置格式化日期。