在我的应用中,我只是将当前日期视为:
[NSDate date];
那么,根据时区,它会有所不同吗?因此,2015年1月1日设备位置设置为澳大利亚,美国日期仍为2014年?
答案 0 :(得分:2)
不,您上面的示例将产生一个与GMT时区绝对偏移的时间,并且不会根据设备的当前位置而改变,它是独立的。
NSDate
的实例不包含任何时区信息。它基本上是1/1/2001的偏移量。
来自Apple的NSDate文档:
NSDate对象代表单个时间点。
稍后提及
...... NSDate使用的绝对参考日期(2001年1月1日GMT的第一个例子)。
时区(或NSTimezone
个对象)可与结合使用与NSDate
和NSCalendar
个对象,然后可由NSDateFormatter
格式化显示。
您可能还想查看[NSLocale systemLocale]
及其兄弟方法,以获取有关iOS如何处理区域设置更改的更多信息。
关于日期和时间编程的一个很好的资源是Apple的Date and Time Programming Guide
答案 1 :(得分:0)
如果你的应用程序有一个按下按钮时调用[NSDate日期]的按钮,我们都在运行应用程序,你打电话给我,我们同时按下按钮,我们将得到相同的NSDate。如果应用程序调用NSLog(@“%@”,[NSDate日期]);我们会看到相同的输出。例如,我们可以比较这些数字并看到你在我做之前按下按钮0.376秒。
现在,如果您有“今年是哪一半”这样的问题,那么仅凭NSDate就无法回答。您必须提供NSLocale,因为同一时间点可能仍然是2014年的一个国家和2015年的另一个国家。
因此,如果您将手机从波士顿移至旧金山,NSDate不会更改,但系统区域设置将更改,并且显示的时间将更改。如果你不小心的话,这就是为什么细微的虫子可以悄悄进入的原因之一:假设你设置一个闹钟,每天早上8点叫醒你。如果程序员使用NSDate编写使警报每24小时运行的代码,那么从波士顿搬到旧金山可能意味着您在错误的时间被唤醒 - 比最后一次警报晚24小时,但是不是早上8点。