如何在ruby中用时区转换时间

时间:2014-11-03 12:01:00

标签: ruby time timezone

我希望通过时间转换来转换时间。

编写一个用时区转换时间的方法。

Time.now + Time.zone_offset("PST")

它会起作用吗?

我需要一个红宝石的方法。

4 个答案:

答案 0 :(得分:1)

没有方法,但你可以为自己制作一个:

class Time
  require 'time'
  def self.by_offset(offset)
    at(now + zone_offset(offset))
  end
end

现在,您可以:

Time.by_offset('PST')
#=> 2014-11-03 10:11:14 +0530
Time.now
#=> 2014-11-03 18:11:13 +0530

测试了1.9.2,2.0.0和2.1.2红宝石(MRI)。

答案 1 :(得分:1)

" PST"仅代表属于太平洋标准时间的太平洋时区的一部分。要完全代表时区,您还必须考虑太平洋夏令时。

要在Ruby中执行此操作,您应该使用tzinfo gem,如下所示:

require 'tzinfo'
tz = TZInfo::Timezone.get('America/Los_Angeles')
now = tz.now

另见"时区!=偏移"在the timezone tag wiki

答案 2 :(得分:0)

没有直接的方法。但你可以解决它

>> a = %w(%Y %m %d %H %M %S)
=> ["%Y", "%m", "%d", "%H", "%M", "%S"]
>> tm = Time.now
=> 2014-11-03 17:46:02 +0530
>> a.map { |s| tm.strftime(s) }
=> ["2014", "11", "03", "17", "46", "02"]
>> a.map! { |s| tm.strftime(s).to_i }
=> [2014, 11, 3, 17, 46, 2]
>> Time.new(*a, Time.zone_offset('PST'))
=> 2014-11-03 17:46:02 -0800

查看new(year, month=nil, day=nil, hour=nil, min=nil, sec=nil, utc_offset=nil) → time文档。 utc_offset for PST-08:00

答案 3 :(得分:0)

查看 in_time_zone

 > Time.zone = 'Hawaii'  
 => "Hawaii" 
 > DateTime.now.in_time_zone 
 => Mon, 03 Nov 2014 04:00:29 HST -10:00   # UTC-10:00
 > DateTime.now
 => Mon, 03 Nov 2014 19:30:41 +0530  # UTC+05:30
 > Time.zone = "Eastern Time (US & Canada)"
 => "Eastern Time (US & Canada)" 
 > DateTime.now.in_time_zone
 => Mon, 03 Nov 2014 09:03:34 EST -05:00