如何计算泰坦尼克号沉没的确切周年纪念日

时间:2012-03-25 16:03:18

标签: nsdate nscalendar nsdatecomponents

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

我需要计算RMS泰坦尼克号在其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日伦敦在BST,所以提前一小时。

我对时区感到困惑。我们有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设备可以将日期更改为这些日历吗? 如果是这样的话。我如何从格里高利转换成伊斯兰教?

开始你的一周的好大脑益智游戏:)

1 个答案:

答案 0 :(得分: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 am实际上发生两次。那个案子你想做什么?您可能不应该让您的应用程序两次庆祝周年纪念日!

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

  

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

我不知道在那方面,我很害怕。