我使用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))
but if do
reftime = tz.time(Time.new(2010,1,1,1,0))
reftime.dst?
false
,但它应该是真的。
我如何检查是否一个特定的日期在一个特定的地点是在夏令时模式?
墨尔本已于20121-10-03 03:00:00开始实行夏令时。所以它使用AEDT而不是AEST。