Как вы получаете DateTime.parse для возврата времени в вашем часовом поясе? - PullRequest
17 голосов
/ 02 января 2011

Мне нужно это

 require 'date'
 DateTime.parse "Mon, Dec 27 6:30pm"

чтобы вернуть DateTime для 18:30 в часовом поясе EDT, но он возвращает в UTC. Как я могу получить EST DateTime или преобразовать UTC в EDT DateTime со значением 18:30?

Ответы [ 4 ]

15 голосов
/ 02 января 2011

ОК, я собираюсь предложить ответ на свой вопрос

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)> 
11 голосов
/ 21 августа 2012

В Rails это хорошо сработало для меня

DateTime.parse "Mon, Dec 27 6:30pm #{Time.zone}"

Это не будет работать в ванильном Ruby.

9 голосов
/ 02 января 2011

Окончательный ответ; -)

require 'date'
estHoursOffset = -5
estOffset = Rational(estHoursOffset, 24)
date = (DateTime.parse("Mon, Dec 27 6:30pm") - (estHoursOffset/24.0)).new_offset(estOffset)

(или -4 для EDT)

3 голосов
/ 18 декабря 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...