我想知道是否可以更改 Ruby 中的时区。我目前在亚洲/加尔各答 (+0530)。
在我的系统中,如果我运行:
>> puts (1935..1945).map { |x| "#{x} => #{Time.new(x).strftime('%z')}" }
1935 => +0530
1936 => +0530
1937 => +0530
1938 => +0530
1939 => +0530
1940 => +0530
1941 => +0530
1942 => +0630
1943 => +0630
1944 => +0630
1945 => +0630
如您所见,时区会根据历史事件发生变化。
我希望 Ruby(在任何地方的任何服务器上运行)在设置 Asia/Kolkata 或 IST 时显示 timzeone +0630。
但是,如果我在位于全球不同地区的不同系统上运行此代码:
我回来了:
1935 => +0100
1936 => +0100
1937 => +0100
1938 => +0100
1939 => +0100
1940 => +0100
1941 => +0200
1942 => +0200
1943 => +0100
1944 => +0100
1945 => +0100
根据他们的时区,这可能是正确的。
现在,如果我尝试按照这个问题Change Time zone in pure ruby (not rails)和答案:
p Time.new(1942).utc.localtime("+05:30").strftime('%z')
=> "+0530"
我的要求中断了。因为亚洲/加尔各答在 1942 年不是 +05:30。
如果我提到 IST:
p Time.new(1942).utc.+(Time.zone_offset('IST')).strftime('%z')
=> "+0000"
这将返回“+0000”。但我想要的输出是“+0630”。
现在有一些网站可以让你这样做。因此,如果我输入“IST”,从技术上讲,在任何服务器上获得 +0630 并非不可能。
那么有没有办法通过提及时区(IST)来恢复 Ruby 中的时区?