9

我正在安排一个带有 NSDate 的本地通知,时间设置为晚上 9 点,并将通知的时区设置为 UTC/GMT。

如果我将设备时区设置为 UTC(时间设置为晚上 8.59),那么通知会按预期在晚上 9 点触发。

但是,如果我将设备时区设置为美国西海岸(即直接将其设置为西雅图或库比蒂诺或 PDT 等)并将时间设置为下午 1.59,或者将设备时区设置为美国东海岸并将时间设置为下午 4.59,那么通知不会分别在下午 2 点或 5 点触发。

但我期待它应该这样做,因为当它是世界标准时间晚上 9 点时,当前夏令时在世界标准时间晚上 9 点相当于东部时间下午 5 点和西部时间下午 2 点。

如果我将设备上的时间设置为晚上 8.59,而设备时区为 PDT,则通知将在晚上 9 点触发,即使我已将通知中的时区设置为 UTC/GMT,这是不正确的,因为太平洋夏令时间晚上 9 点不是晚上 9 点世界标准时间。

因此,在我看来,操作系统忽略了我正在设置的通知时区。有没有人有任何解释为什么它不能按预期工作?

谢谢

4

2 回答 2

6

timeZone请参阅以下属性的文档 UILocalNotification

...如果您为此属性分配一个有效的 NSTimeZone 对象,则触发日期将被解释为挂钟时间,当时区发生变化时会自动调整;适合这种情况的一个例子是闹钟。

因此,我假设如果您想要通知的绝对时间,则不得分配时区。

于 2012-08-03T20:43:14.097 回答
1

夏令时更改似乎并非如此。我有一些将时区设置为 localTimeZone 的重复通知,但自从上周末以来,当时钟前进一个小时后,它们又在一个小时后触发,即在 19:00 而不是 18:00。

好像当我安排一个活动时,我必须确定那个日期的时区并使用它。

谢谢

于 2013-04-03T07:23:08.617 回答