ruby - Ruby - 获取特定日期和时间的纬度和经度的时区偏移量
问题描述
我正在使用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
了,但这应该是真的。
如何检查特定位置的特定日期是否处于夏令时模式?
解决方案
墨尔本已于 2021-10-03 03:00:00 开始实行夏令时。所以它使用的是AEDT,而不是AEST。
推荐阅读
- awk - 来自多个文件的 awk Sum 列并将结果放在一个文件中
- ruby-on-rails - Sidekiq:perform_async 中的参数作为字符串而不是实际对象或 ActiveRecord::Relation 发送
- java - 从 servlet 类调用 jsp 页面不起作用?
- python - 堆叠两个具有不同隐藏层的 LSTM
- aws-lambda - 如何仅使用代码部署服务从 s3 部署压缩 lambda 代码?
- php - PHPUnit + Selenium`InvalidArgumentException:找不到元素`
- c# - 如何从发出呼叫的位置获取请求 URL?
- java - android 中的 Listview 项目应显示 ble 设备的名称,但应隐藏设备的 MAC 地址
- excel - 如何从 Excel 中的行动态创建下拉列表
- reactjs - 使用递归渲染的 Material UI 嵌套列表不适用于反应钩子