【发布时间】:2017-04-15 09:57:52
【问题描述】:
上下文:
用户提供日期和时间以及特定的 UTC 偏移量
1994-06-05T08:15:30-05:00
然后通过一些 Java 日期时间库传递,这些库确定这发生在夏令时期间,并有助于在偏移量上增加一个小时(如果时间戳不在夏令时,则不加修改地返回):
1994-06-05T08:15:30-04:00(注意15:30 的时间不会改变)
最后,我在前端 (javascript) 中收到该字符串,我只需要完全按照输入的方式显示原始 UTC 偏移量,在本例中为 -05:00。
在此之前我无法更改流程的任何部分,因此我唯一的选择是尝试对夏令时检测进行逆向工程,并在适当的时候减去一小时的偏移量。
由于日期和时间保持不变,一个明显的解决方案是检查IF date and time are in daylight savings time THEN subtract one hour from offset。对于大多数时间戳来说,这是可行的,但是在 DST 边界存在问题,因为例如相同的时间戳可能会在 DST 生效当天的凌晨 1 点到凌晨 2 点出现两次。考虑到有关如何生成最终时间戳的信息,我是否可以使用任何方法来消除在 DST 边界发生的部分或全部时间戳的歧义?
【问题讨论】:
-
您使用的时间是 UTC - 在 UTC 时间中没有关于原始时区的有用信息,因为它可能绝对是任何东西 - 有时在处理日期/时间时使用字符串要容易得多(在我看来)
-
日期和时间只是日期和时间。该数据没有任何内容可以将其识别为最初来自给定时区。您首先需要研究如何获取这些数据并从那里收集时区信息。
-
这就是我提供有关如何生成时间戳的上下文的原因。如果时间戳不在夏令时,则返回时间戳,否则返回时间戳加上 1 小时偏移量。鉴于这些信息,我怀疑至少在某些情况下有办法猜测原始时区。
-
@K.R.S.很多地方都有夏令时。这不仅限于东海岸。为了识别原始时区,您需要一条或多条与该时区相关的信息。您拥有的唯一信息是日期、时间和 DST 偏移量。这些信息不足以唯一标识任何时区。
-
@K.R.S.回复:您的编辑。想象一下,来自 CST 的某个人在同一日期提交数据,但似乎比 EST 中的某个人早一小时。您在前端收到的数据将等于一小时后您从 EST 某人那里获得的数据。
标签: javascript datetime timezone momentjs