我正在从服务器上提取一个ISO 8601格式的日期。日期表示某一特定节目的某一集播出的时间。下面是一个示例日期:
"2013-07-30T21:00:00-05:00“
那是2013年7月30日美国东部时间晚上9点。最好是-05点。当我尝试将日期显示给用户时(在本例中我自己),问题就出现了。我目前在中央时间,但夏令时是活跃的。这意味着iOS说我现在在中央夏令时间,也就是-05:00(正常的CST是-06:00)。
这个节目晚上8点在我的CST时区播出。无论夏令时间是开了还是关了,只要时间是晚上8:00,节目就会播出。通常情况下,如果我不在夏令时,iOS将能够进行适当的转换,因为它将从-05:00移动到-06:00。SInce我目前正处于夏令时,虽然它将-05:00视为原始偏移量,-05:00为我当前的偏移量,因此它不进行转换,并从晚上9:00开始显示节目。知道怎么处理这事吗?
发布于 2013-09-07 18:35:55
不幸的是,无法将像-05:00这样的时区偏移量映射回实际时区,如中央时间或东部时间。正如您所指出的,可能是中央夏令时间,也可能是东部标准时间。然而,它可能是任意数量的其他时区,恰好在某个点使用-05:00偏移量。请参阅此时区列表并按偏移量列之一进行排序,这样您就可以了解它们的数量。你也可以看这儿。
幸运的是,您还有另一条信息-日期/时间。所以你可以用它来部分区分这些区域。如果你确信你的数据是美国的话,你也可以进一步限制歧义。
不过,仍有一个问题。像2013-11-03T01:00:00-05:00这样的时代实际上同时存在于CDT和EST!这怎么可能呢?嗯,在美国,我们并不是都同时改变我们的时钟。每个时区在当地时间凌晨2点改变它。所以每年都有一个小时,东部时间已经经历了退步过渡,但是中央时间还没有。
处理所有这些问题的唯一真正方法是存储其他一些上下文信息,例如完整的IANA时区(America/New_York表示东方或America/Chicago表示Central等),或者如果它只是为了显示,那么您可以存储一个字符串,其中包含您选择的时区缩写(EST、CDT等)。
另见:时区标记wiki中的“时区!=偏移”。
https://stackoverflow.com/questions/18675991
复制相似问题