我希望通过时间转换来转换时间。
编写一个用时区转换时间的方法。
Time.now + Time.zone_offset("PST")
它会起作用吗?
我需要一个红宝石的方法。
答案 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