在纯 Ruby 中获取时区(无 rails)
Getting timezone in pure Ruby (no rails)
我想知道我是否可以更改 Ruby 中的时区。我目前在 Asia/Kolkata (+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。
但是,如果我 运行 此代码位于全球不同地区的 different system 上:
我回来了:
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"
我的要求打破了。因为 Asia/Kolkata 在 1942 年不是 +05:30。
如果我提到 IST:
p Time.new(1942).utc.+(Time.zone_offset('IST')).strftime('%z')
=> "+0000"
这个returns“+0000”。但我想要的输出是“+0630”。
现在 websites 可以让您做到这一点。因此,如果我输入“IST”,从技术上讲,在任何服务器上获得 +0630 并非不可能。
那么有没有办法通过提及时区 (IST) 来恢复 Ruby 中的时区?
For the time being, this works TZ=Asia/Kolkata ruby -e "p Time.new(1942).strftime('%z')"
设置 TZ
环境变量也适用于 Ruby:(参见 test_time_tz.rb
)
def with_tz(tz)
old = ENV['TZ']
ENV['TZ'] = tz
yield
ensure
ENV['TZ'] = old
end
with_tz('Asia/Kolkata') do
(1935..1945).each do |x|
puts "#{x} => #{Time.local(x).strftime('%z')}"
end
end
我想知道我是否可以更改 Ruby 中的时区。我目前在 Asia/Kolkata (+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。
但是,如果我 运行 此代码位于全球不同地区的 different system 上:
我回来了:
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"
我的要求打破了。因为 Asia/Kolkata 在 1942 年不是 +05:30。
如果我提到 IST:
p Time.new(1942).utc.+(Time.zone_offset('IST')).strftime('%z')
=> "+0000"
这个returns“+0000”。但我想要的输出是“+0630”。
现在 websites 可以让您做到这一点。因此,如果我输入“IST”,从技术上讲,在任何服务器上获得 +0630 并非不可能。
那么有没有办法通过提及时区 (IST) 来恢复 Ruby 中的时区?
For the time being, this works
TZ=Asia/Kolkata ruby -e "p Time.new(1942).strftime('%z')"
设置 TZ
环境变量也适用于 Ruby:(参见 test_time_tz.rb
)
def with_tz(tz)
old = ENV['TZ']
ENV['TZ'] = tz
yield
ensure
ENV['TZ'] = old
end
with_tz('Asia/Kolkata') do
(1935..1945).each do |x|
puts "#{x} => #{Time.local(x).strftime('%z')}"
end
end