【问题标题】:Why Ruby is returning different timezones for different years?为什么 Ruby 在不同年份返回不同的时区?
【发布时间】:2026-02-22 00:30:02
【问题描述】:

我的时区是 IST,+0530。 如果我通过最近几年的参数,它会显示正确的区域:

Time.new('2000', '02', '29')    # => 2000-02-29 00:00:00 +0530

但该区域多年来的变化如下:

Time.new('1000', '01', '29')    # => 1000-01-29 00:00:00 +0553
Time.new('1943')                # => 1943-01-01 00:00:00 +0630
Time.new('1871')                # => 1871-01-01 00:00:00 +0521

为了找出以前的日期,我创建了一个循环:

puts 2_200.times.map { |i| Time.new(i.to_s) }

正如我在未来几年看到的那样,该区域是 +0530,但在过去的几个世纪中,该区域有时会有所不同!

为什么同一个系统中的区域不同?

【问题讨论】:

  • 时区历史变化。例如,在战争期间并不少见。 en.wikipedia.org/wiki/Time_in_India#Recorded_history
  • 我其实不知道。顺便说一句,这些值是硬编码到 Ruby 中的吗?
  • @Mat,读起来很有趣。一个footnote(在 Tz_database 链接上)引起了我的注意,涉及受威胁的版权诉讼。
  • 无论如何,它不是 Ruby,我系统中的 date 命令打印相同的输出!! date -d 1943/11/24 +%z 打印 +0630...

标签: ruby date timezone timezone-offset


【解决方案1】:

为什么同一个系统中的区域不同?

因为时区会随着时间而变化。

【讨论】:

    最近更新 更多