1

在我正在开发的 Web 应用程序(Ruby on Rails)中,用户可以指定世界上任何位置的本地时间。(该位置与用户的位置或服务器的位置无关。)

如果在该位置使用夏令时,则用户键入该时间。我需要从指定的夏令时获取该位置的没有夏令时的当地时间。

例如,服务器在旧金山。用户在纽约。在冬季,用户在夏季输入明尼阿波利斯的当地时间(有夏令时)。而且我需要在没有夏令时偏移的情况下获得与明尼阿波利斯相同的当地时间。假设我们不知道明尼阿波利斯是否使用夏令时。

因为用户可以指定世界上的任何位置,我们无法判断该位置是否使用夏令时。此外,UTC 偏移信息本身并不能说明它是否处于夏令时。

我怎样才能做到这一点?

任何帮助将不胜感激?

4

1 回答 1

1

olson TZ 数据库(可通过 tzinfo gem 获得)确实包含有关每个位置是否使用夏令时(以及该时间段何时开始/结束)的信息。您通常应该使用它提供的时区对象,而不是原始的 UTC 偏移量。当您有一个时区对象时,该local_to_utc方法将为您进行转换,并酌情应用 DST。

唯一模棱两可的情况是时钟倒退:一年中有一个小时,本地时间可以对应于两个不同的时间点。例如在英国,在 10 月底,时钟会在 1:59:59 倒退一小时 - 如果用户告诉您当地时间 1:30:00,您将不知道它是第一个还是第二个 1: 30. Tzinfo 可以告诉您这两种可能性,以便您根据自己的逻辑进行选择。

于 2012-07-21T22:56:37.920 回答