首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UTC偏移量和时区的NSDate问题

UTC偏移量和时区的NSDate问题
EN

Stack Overflow用户
提问于 2013-09-07 17:28:40
回答 1查看 413关注 0票数 0

我正在从服务器上提取一个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开始显示节目。知道怎么处理这事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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中的“时区!=偏移”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18675991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档