У меня проблемы с преобразованием UTC Time
или TimeWithZone
местного времени в Rails 3.
Скажем moment
, какая-то Time
переменная в формате UTC (например moment = Time.now.utc
). Как мне перейти moment
на мой часовой пояс, заботясь о DST (например, используя EST / EDT)?
Точнее, я хотел бы распечатать «Понедельник, 14 марта, 9 AM», если время соответствует 9 AM EDT сегодня утром, и «Понедельник 7 марта, 9 AM», если время было 9 AM EST в прошлый понедельник.
Надеюсь, есть другой способ?
Изменить : сначала я подумал, что «EDT» должен быть признанным часовым поясом, но «EDT» не является фактическим часовым поясом, больше похожим на состояние часового пояса. Например, нет смысла просить Time.utc(2011,1,1).in_time_zone("EDT")
. Это немного сбивает с толку, поскольку «EST» - это фактический часовой пояс, используемый в нескольких местах, которые не используют летнее время и имеют (UTC-5) год.
источник
(new Date()).getTimeZoneOffset()
. Но это довольно непоследовательно, так что этот парень, кажется, написал свое собственное: onlineaspect.com/2007/06/08/…config.time_zone = 'Wellington'
а затем использовать Time.current (который эквивалентен time.now, но использует установленный вами часовой пояс)Time#localtime
даст вам время в текущем часовом поясе машины, на которой запущен код:Обновление: если вы хотите перейти на определенные часовые пояса, а не на свой собственный часовой пояс, вы на правильном пути. Однако вместо того, чтобы беспокоиться о EST и EDT, просто перейдите в общий восточный часовой пояс - он будет знать в зависимости от дня, EDT или EST:
источник
in_time_zone
метод с их часовым поясом .Time.now.localtime
работает в обычном сеансе irb, но когда я пытаюсь запустить его на компьютере, который находится в часовом поясе UTC, он не работает.Его легко настроить, используя локальную зону вашей системы, просто добавьте это в application.rb
Затем рельсы должны показать вам метки времени в вашем местном времени, или вы можете использовать что-то вроде этой инструкции, чтобы получить местное время
источник
На самом деле есть хороший Gem,
local_time
который вызывается basecamp, чтобы делать все это только на стороне клиента, я считаю:https://github.com/basecamp/local_time
источник
Не знаю почему, но в моем случае это не работает так, как предлагалось ранее. Но работает это так:
Конечно, вам нужно изменить
offset
значение на свое.источник
Если вы на самом деле делаете это только потому, что хотите получить часовой пояс пользователя, тогда все, что вам нужно сделать, это изменить свой часовой пояс в себе
config/applications.rb
.Как это:
Rails по умолчанию сохранит вашу запись времени в формате UTC, даже если вы укажете текущий часовой пояс.
Так что это все, что вам нужно сделать, и все готово.
источник