Ruby 如何从utc偏移量获取tz标识符字符串
在考虑DST变化的同时,如何从utc偏移量中以秒为单位获取tzinfo格式的时区,即Ruby 如何从utc偏移量获取tz标识符字符串,ruby,tzinfo,Ruby,Tzinfo,在考虑DST变化的同时,如何从utc偏移量中以秒为单位获取tzinfo格式的时区,即美国/多伦多 例如,DST设置上次更改时间为2014年3月9日凌晨2:00。请参见偏移差 Varinder $ irb 2.1.0 :001 > Time.local(2014,03,9,1,59) => 2014-03-09 01:59:00 -0500 2.1.0 :002 > Time.local(2014,03,9,2,00) => 2014-03-09 03:00:
美国/多伦多
例如,DST设置上次更改时间为2014年3月9日凌晨2:00。请参见偏移差
Varinder $ irb
2.1.0 :001 > Time.local(2014,03,9,1,59)
=> 2014-03-09 01:59:00 -0500
2.1.0 :002 > Time.local(2014,03,9,2,00)
=> 2014-03-09 03:00:00 -0400
2.1.0 :003 >
2.1.0 :006 > Time.local(2014,03,9,2,00).zone
=> "EDT" # I need America/Toronto format
对于这两个时间示例,计算的tzinfo字符串应该是相同的,因为偏移量的唯一差异是由DST引起的。您必须解决DST问题,但这可能会使您达到目的(我在PST…) 偏移量=时间.本地(2014,03,9,1,59).utc\U偏移量 => -28800 >ActiveSupport::TimeZone.all.选择{| tz | tz.utc|u offset==offset} => [#, #] 试试这个
zone_abbr = Time.local(2014,03,9,2,00).zone
ActiveSupport::TimeZone.
all.
select{|tz| tz.tzinfo.current_period.abbreviation.to_s == zone_abbr}.
map(&:tzinfo).
map(&:name)
对于
“EDT”
此代码返回[“美国/纽约”,“美国/印第安纳/印第安纳波利斯”]
使用此。。类似于时间.本地(2014,03,9,1,59).zone
。。或者Time.local(2014,03,9,1,59).strftime(“%Z”)
。是时区
返回EDT
但我需要美国/多伦多
我在印度。。不要对其他人有任何想法:p印度也是如此,它将返回IST
而不是Asia/kolkata
:p这几乎是不可能的,因为许多国家/地区共享同一时区,您可以查看
zone_abbr = Time.local(2014,03,9,2,00).zone
ActiveSupport::TimeZone.
all.
select{|tz| tz.tzinfo.current_period.abbreviation.to_s == zone_abbr}.
map(&:tzinfo).
map(&:name)