Ответ 1
Окончательный ответ; -)
require 'date'
estHoursOffset = -5
estOffset = Rational(estHoursOffset, 24)
date = (DateTime.parse("Mon, Dec 27 6:30pm") - (estHoursOffset/24.0)).new_offset(estOffset)
(или -4 для EDT)
Мне нужно это
require 'date'
DateTime.parse "Mon, Dec 27 6:30pm"
чтобы вернуть DateTime в 18:30 в часовой пояс EDT, но он возвращает один в UTC. Как я могу получить EST DateTime или преобразовать UTC один в EDT DateTime со значением 6:30 вечера?
Окончательный ответ; -)
require 'date'
estHoursOffset = -5
estOffset = Rational(estHoursOffset, 24)
date = (DateTime.parse("Mon, Dec 27 6:30pm") - (estHoursOffset/24.0)).new_offset(estOffset)
(или -4 для EDT)
OK Я собираюсь дать ответ на свой вопрос
require 'time'
ENV["TZ"] = "US/Eastern"
Time.parse("Mon, Dec 27 6:30pm").to_datetime
=> #<DateTime: 2011-12-27T18:30:00-05:00 (117884327/48,-5/24,2299161)>
В Rails это отлично работало для меня
DateTime.parse "Mon, Dec 27 6:30pm #{Time.zone}"
Однако он не будет работать в ванильном рубине.
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
Будьте осторожны с этим, потому что вы можете видеть, что он также очистил минуты.
Здесь docs для метода change()
: http://api.rubyonrails.org/v5.1/classes/DateTime.html#method-i-change