我们的系统目前默认为悉尼时间。我试图将一些报告本地化到另一个时区而不改变报告的每日间隔(即00:00:00到23:59:59)。
每当我尝试将时间对象转换为另一个时区时,它会将小时/分钟/秒与区域一起转换。
[16] pry(main)> t = Time.now
=> 2015-09-07 14:41:33 +1000
[17] pry(main)> t.in_time_zone("Darwin")
=> Mon, 07 Sep 2015 14:11:33 ACST +09:30
有人可以指出我正确的方向吗?
谢谢!
答案 0 :(得分:3)
您可以使用Time::use_zone
覆盖给定块内的时区:
t = Time.parse('2015-09-07 14:41:33 +1000')
#=> 2015-09-07 14:41:33 +1000
Time.use_zone('Darwin') { Time.zone.local(t.year, t.month, t.day, t.hour, t.min, t.sec) }
#=> Mon, 07 Sep 2015 14:41:33 ACST +09:30
或快捷方式:
Time.use_zone('Darwin') { Time.zone.local(*t) }
#=> Mon, 07 Sep 2015 14:41:33 ACST +09:30
*t
将t
转换为数组(使用Time#to_a
)并将其元素作为参数传递:
可以将十个元素直接传递给
::utc
或::local
以创建新的Time
对象。
答案 1 :(得分:1)
使用正则表达式可能是最简单的方法:
t = Time.now
#=> 2015-09-07 05:53:23 +0000
Time.parse t.to_s.sub(/[+-]\d+$/, '+0930')
#=> 2015-09-07 05:53:23 +0930
答案 2 :(得分:0)
我找到了一个解决方案..请随意留下任何更好的答案,因为我还是一个低年级的人。
我创建了以下方法:
def export_in_timezone(time, zone)
Time.use_zone(zone) { time.to_datetime.change(offset: Time.zone.now.strftime("%z")) }
end
并传入每个正在创建的报告的时间和时区。
谢谢!