Ios NSDate是否根据设备更改';现在在哪里?还是独立?

Ios NSDate是否根据设备更改';现在在哪里?还是独立?,ios,nsdate,Ios,Nsdate,在我的应用程序中,我只是将当前日期作为: [NSDate date]; 那么,根据时区,它会有所不同吗?因此,在2015年1月1日,设备位置设置在澳大利亚,美国日期仍然是2014年?否,您上面的示例将生成一个与GMT时区有绝对偏移的时间,并且不会根据设备的当前位置而改变,它是独立的 NSDate的实例不包含任何时区信息。这基本上是对2001年1月1日的抵消 来自苹果的NSDate文档: NSDate对象表示单个时间点 后来提到 。。。NSDate使用的绝对参考日期(第一次为2001年1月1日,

在我的应用程序中,我只是将当前日期作为:

[NSDate date];

那么,根据时区,它会有所不同吗?因此,在2015年1月1日,设备位置设置在澳大利亚,美国日期仍然是2014年?

否,您上面的示例将生成一个与GMT时区有绝对偏移的时间,并且不会根据设备的当前位置而改变,它是独立的

NSDate
的实例不包含任何时区信息。这基本上是对2001年1月1日的抵消

来自苹果的NSDate文档:

NSDate对象表示单个时间点

后来提到

。。。NSDate使用的绝对参考日期(第一次为2001年1月1日,格林尼治标准时间)

时区(或
NSTimezone
对象)可与
NSDate
NSCalendar
对象结合使用,然后可由
NSDateFormatter
对其进行格式化以供显示

您可能还想查看
[NSLocale systemLocale]
及其同级方法,以了解有关iOS如何处理区域设置更改的更多信息


关于日期和时间编程的一个很好的资源是苹果的

如果你的应用程序有一个按钮,按下时会调用[NSDate date],我们都在运行该应用程序,你打电话给我,我们同时按下按钮,我们将得到相同的NSDate。如果应用程序调用NSLog(@“%@,[NSDate]);我们将看到相同的输出。例如,我们可以比较这些数字,看到你在我按下按钮之前0.376秒按下了按钮

现在,如果你有像“现在是哪一年”这样的问题,单凭NSDate是无法回答的。您必须提供NSLocale,因为同一时间点在一个国家可能仍然是2014年,在另一个国家可能仍然是2015年


所以NSDATE不会改变,如果你把手机从波士顿移到旧金山,但是系统环境会改变,并且显示的时间会发生变化。这就是为什么如果你不小心的话,微小的虫子会爬进来的原因之一:比如说你设置了一个闹钟,每天早上8点叫醒你。如果程序员编写代码,使警报使用NSDATE每24小时运行,从波士顿移动到旧金山可能意味着你在错误的时间被唤醒-比最后一个警报晚24个小时,但不是8AM。p> 相关问题:如果我在波士顿将NSDate设置为4:00,并在旧金山访问它,那么两者都是1:00还是波士顿是4:00,旧金山是:1:00波士顿是GMT-4。如果您在设置为GMT-4的设备上于04:00 GMT(上午4点)调用
[NSDate date]
,NSDate将存储08:00 GMT的绝对值。如果您在同一时间00:00(午夜)在SFO(GMT-8)中执行相同操作,则内部NSDate值将相同。