1

是的,这是一个 iOS 编程问题。

我需要计算 RMS Titanic 沉没 100 周年的确切时间。

It sunk at 15th April 1912 2:20 a.m. 

你说的愚蠢的问题。100周年是

15th April 1912 2:20 a.m. 
+100 years
15th April 2012 2:20 a.m. 

但我希望在世界上的任何时区准确地发出警报并且需要处理时区,并且像英国夏令时提前一小时但它直到 1918 年才生效......但截至今天 2012 年 3 月 25 日伦敦在英国夏令时,所以提前一小时。

我对时区感到困惑。我们有 GMT 和 UTC。这些船在比伦敦早几个小时的 49° 56' 49" W、41° 43' 32" N 处沉没。-49.94822196927015 41.72713826043066

Whats the correct way to enter a historic date into NSCalendar 
and to add 100 years to it exactly and get back the right time 
in the users current timezone?

我注意到 NSCalendar 选项中有日语和伊斯兰日历格式。iOS 设备可以将日期更改为这些日历吗?如果是这样的话。我将如何从公历转换为伊斯兰教?

不错的大脑益智游戏,开始你的一周:)

4

1 回答 1

1

(这里没有代码,因为我从未使用过 iOS API。但是,我对日期/时间 API 以及它们抛出的奇怪问题有一些经验,所以我希望你觉得这个答案还是有用的。)

将历史日期输入 NSCalendar 并准确添加 100 年并在用户当前时区取回正确时间的正确方法是什么?

这真的取决于你所说的“100 年”是什么意思——这并不是一个固定的时间。

我会采用它下沉的 UTC 时刻,应用用户的本地时区,然后再加上一百年。但是,您需要考虑到结果实际上可能不是该时区的有效本地时间。

例如,假设你在一个时区,在下沉的那一刻是凌晨 1 点 20 分......但在那个时区,2012 年 4 月 15 日是时钟变化的时间——它们从凌晨 1 点跳到凌晨 2 点。在这种情况下,凌晨 1 点 20 分永远不会发生……因此您可以选择凌晨 12 点 20 分,即 DST 转换前的瞬间、DST 转换的瞬间或凌晨 2 点 20 分,具体取决于您认为合适的时间。

另一个需要考虑的可能性是相反的——假设它是从凌晨 2 点到凌晨 1 点的 DST 转换......所以凌晨 1:20 实际上发生了两次。在这种情况下你想做什么?您可能不应该让您的应用两次庆祝周年纪念日!

消除这种歧义和差异的可能性的另一个选择是计算出用户时区与 UTC 的偏移量是在下沉的确切时间,然后将 100 年添加到UTC值(永远不会有任何 DST 转换)并再次应用相同的偏移量。

我注意到 NSCalendar 选项中有日语和伊斯兰日历格式。iOS 设备可以将日期更改为这些日历吗?如果是这样的话。我将如何从公历转换为伊斯兰教?

我不知道在这方面,我害怕。

于 2012-03-25T16:08:49.933 回答