我需要用当前版本的IANA数据库(例如2022g)来存储日期时间记录,我怎样才能用Go语言得到它呢?
我试着在标准的“time”包中搜索这个,但是似乎没有任何功能。我希望有一些函数可以返回IANA tzdb版本作为字符串。
根据以下评论更新1,我需要澄清问题:
主要的问题是我想存储一些FUTURE事件。事件对象有几个字段:
1.本地日期时间
1.时区
- UTC日期时间
为了使我的数据与IANA数据库保持最新(时区、夏令时可能会更改),我需要存储当前版本的tzdb版本。这将有助于我在发布新版本的tzdb时编写正确的事件数据迁移。因此,我需要添加一个字段,其中包含用于填充时间的当前tzdb版本。
我正在尝试弄清楚如何获取Go应用程序当前用来存储该版本的tzdb的当前版本。
此外,我也对存储时间记录的替代解决方案持开放态度,这些解决方案对长期存在的未来事件具有额外的准确性。
更新2:这些事件被限制在确切的位置。
1条答案
按热度按时间2mbi3lxu1#
评论中的讨论线索相当长,但我将尝试回答和解决其中的一些问题(我不会在标题中解决这个问题,因为我相信这在Go语言中并不简单)。
Zone
或Link
。因此,您不需要检查时区是否仍然存在。(Windows时区ID也是如此。)在大多数情况下,解决此问题的一般方法是:
示例:
2030-12-31T00:00:00[America/New_York]
DateTimeOffset
值)并将其存储在单独的字段中,以便您确切地知道何时触发事件:示例:
2030-12-31T05:00:00Z
(或2030-12-31T00:00:00-05:00
)只有当设备上的时区数据发生更改以给予新的偏移量时,偏移量才会与预计的不同。例如,假设美国立法者在此事件发生前的某个时间成功地使DST永久化。那么,相同事件的等效UTC时间现在将是
2030-12-31T04:00:00Z
(或2030-12-31T00:00:00-04:00
)。在这种情况下,如果事件的UTC时间发生了变化,请更新它,但事件的原始本地时间通常不应被修改。人类倾向于根据本地时间安排事情,而不是根据UTC时间。
了解TZDB版本给您带来的唯一好处是,您可以减少执行最后一步的频率--只有在知道数据发生了变化时才执行。我认为这是一种优化--通常不需要。