Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何从utc偏移量获取tz标识符字符串_Ruby_Tzinfo - Fatal编程技术网

Ruby 如何从utc偏移量获取tz标识符字符串

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变化的同时,如何从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: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)