你如何让DateTime.parse返回你所在时区的时间?
我需要这个
require 'date' DateTime.parse "Mon, Dec 27 6:30pm"
在EDT时区中返回日期时间为下午6:30,但它以UTC格式返回一个。 如何获得EST DateTime或将UTC转换为具有下午6:30值的EDT DateTime?
最后答案;-)
require 'date' estHoursOffset = -5 estOffset = Rational(estHoursOffset, 24) date = (DateTime.parse("Mon, Dec 27 6:30pm") - (estHoursOffset/24.0)).new_offset(estOffset)
(或EDT为-4)
好的,我将回答我自己的问题
require 'time' ENV["TZ"] = "US/Eastern" Time.parse("Mon, Dec 27 6:30pm").to_datetime => #
在Rails中,这对我很有用
DateTime.parse "Mon, Dec 27 6:30pm #{Time.zone}"
但它不适用于vanilla Ruby。
DateTime#change()
解析后可以尝试使用change()
来改变时区偏移量:
DateTime.parse( "Mon, Dec 27 6:30pm" ).change( offset: '-0400' ) # => Wed, 27 Dec 2017 18:30:00 -0400
您也可以使用小时:
DateTime.parse( "Mon, Dec 27 6:30pm" ).change( offset: '-4' ) # => Wed, 27 Dec 2017 18:30:00 -0400
但是,要小心,你不能使用整数:
DateTime.parse( "Mon, Dec 27 6:30pm" ).change( offset: -4 ) # => Wed, 27 Dec 2017 18:30:00 +0000
如果您需要根据时区确定要使用的正确偏移量,您可以执行以下操作:
offset = ( Time.zone_offset('EDT') / 1.hour ).to_s # => "-4" DateTime.parse( "Mon, Dec 27 6:30pm" ).change( offset: offset ) # => Wed, 27 Dec 2017 18:30:00 -0400
您也可以使用change()
手动设置DateTime
其他部分,例如将hour
设置为中午:
DateTime.parse( "Mon, Dec 27 6:30pm" ).change( offset: '-4', hour: 12 ) # => Wed, 27 Dec 2017 12:00:00 -0400
小心那个,因为你可以看到它也清除了分钟。
这是change()
方法的文档: http : //api.rubyonrails.org/v5.1/classes/DateTime.html#method-i-change