Как мы можем преобразовать время из EDT в EST в рельсах?

Я знаю, что разница между EDT и EST заключается только в переходе на летнее время в 1 час, но все же я предполагаю, что Rails рассматривает его как разные часовые пояса, верно?

Теперь у меня есть два значения времени: одно в зоне EDT, а другое в IST. Мне нужно преобразовать оба этих значения времени в EST. Я мог бы сделать это успешно по времени IST, но не по времени EDT. Как я могу преобразовать время EDT в EST в Rails?

[36] pry(#<Quiz>)> Time.zone
=> (GMT-05:00) Eastern Time (US & Canada)
[37] pry(#<Quiz>)> from_date
=> 2015-03-02 00:00:00 +0530
[38] pry(#<Quiz>)> unlock_at
=> Mon, 16 Mar 2015 00:00:00 EDT -04:00
[39] pry(#<Quiz>)> from_date.in_time_zone
=> Sun, 01 Mar 2015 13:30:00 EST -05:00
[40] pry(#<Quiz>)> unlock_at.in_time_zone
=> Mon, 16 Mar 2015 00:00:00 EDT -04:00

Любая помощь будет принята с благодарностью :)


person Rajesh Omanakuttan    schedule 12.03.2015    source источник


Ответы (2)


Я знаю, что разница между EDT и EST заключается только в переходе на летнее время в 1 час, но все же я предполагаю, что Rails рассматривает его как разные часовые пояса, верно?

Я бы не ожидал, нет. Сами по себе они не являются разными часовыми поясами — это просто разные части восточного часового пояса. К сожалению, насколько мне известно, для этой концепции «части часового пояса» не существует общепринятого термина.

Преобразование между EST и EDT, как правило, не имеет никакого смысла — при условии, что вы говорите об одном часовом поясе — потому что любой момент происходит либо, когда наблюдается EST, или при соблюдении EDT. Говорить о (скажем) «12 июня, 10:00 по восточному стандартному времени» бессмысленно (хотя я знаю, что это происходит), потому что в июне EST не действует. В человеческом общении тогда неясно, что говорящий на самом деле имеет в виду UTC-5 (не зная о летнем времени) или UTC-4 (не зная о значении буквы S в EST).

Это имело бы какой-то смысл только в том случае, если бы у вас было два часовых пояса, оба из которых являются вариантами восточного, но имеют разные точки перехода. В этом случае вам следует просто поговорить о преобразовании между этими двумя часовыми поясами.

По сути, текущий результат, который вы показали, вполне разумен - вы конвертируете две точки во времени в восточный часовой пояс, и одна приходится на период, когда он наблюдает EST, а другой приходится на период, когда он наблюдает EDT. Вы не должны не пытаться представить последнее в EST, поскольку на тот момент его не существовало.

Если вы хотите представить все в фиксированном смещении UTC-5, вы должны это сделать, но не заявляйте, что это EST.

person Jon Skeet    schedule 12.03.2015

Я не думаю, что вам следует беспокоиться о преобразованиях EST EDT. Вам нужно будет установить часовой пояс на восточный, и время будет отображаться в зависимости от того, является ли день EDT или EST.

Попробуй это ;)

Time.now.in_time_zone("Eastern Time (US & Canada)") (Time.now + 8.months).in_time_zone("Eastern Time (US & Canada)")

person SureshCS    schedule 12.03.2015