【问题标题】:Ruby - Get timezone offset from latitude and longitude for specific date and timeRuby - 获取特定日期和时间的纬度和经度的时区偏移量
【发布时间】:2021-12-01 01:40:24
【问题描述】:

我正在使用timezone gem 从纬度和经度获取时区。我需要时区来进行一些太阳计算。我使用的 API 需要时区偏移量(没有日光)。例如,现在 (2021/10/12 12:37) 在英国使用 BST 时间,API 的时区偏移量将为零。 timezone 虽然我会得到 3600

tz = Timezone.lookup(51.51, 0.1)
=> #<Timezone::Zone name: "Europe/London">
tz.utc_offset
=> 3600

这很容易。我可以检查夏令时并更正。

(tz.dst?) ? (tz.utc_offset) : (tz.utc_offset - 3600)

只要是在我所在地区的时区,我可以再做一次(我在 2010 年进行所有计算)。

如果我尝试在墨尔本,我无法在该位置创建时间并检查夏令时。我确定我做错了什么。我是不是想多了?

例如:

tz = Timezone.lookup(-37.814, 145)
=> #<Timezone::Zone name: "Australia/Melbourne">
tz.utc_offset
=> 39600 ((10 + 1)h)

现在是 (2021/10/12 12:37),但要让我的 API 工作,这应该是 10,因为不应该包括日光。

我的想法是取一个参考时间,2010/01/01 01:00 并为该时间进行所有计算。问题是我不知道如何在特定时区创建时间并检查该时间是否为日光时间。

我试过了

reftime = tz.time(Time.new(2010,1,1,1,0))

但如果这样做

reftime = tz.time(Time.new(2010,1,1,1,0))
reftime.dst?

我得到了false,但这应该是真的。

如何检查特定位置的特定日期是否处于夏令时模式?

【问题讨论】:

    标签: ruby time timezone timezone-offset


    【解决方案1】:

    墨尔本已于 2021 年 10 月 3 日 03:00:00 开始实行夏令时。所以它使用的是 AEDT,而不是 AEST。

    【讨论】:

      猜你喜欢
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 2020-12-27
      • 2011-11-12
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      相关资源
      最近更新 更多