Как установить часовой пояс по умолчанию для ruby Gem Chronic на Определенный часовой пояс без рельсов
Вопрос
По умолчанию драгоценный камень Chronic использует часовой пояс системы в качестве часового пояса по умолчанию.
Здесь говорится ( https://github.com/mojombo/chronic), что я могу использовать ActiveSupports Time.zone, чтобы изменить это. Но я не использую Rails, я использую Sinatra и включаю активную поддержку только для того, чтобы использовать класс часовых поясов, кажется ненужным.
Как еще я могу это сделать?
Что я пытаюсь сделать
Я использую Chronic для системной отчетности / информационных панелей и статистики.
Серверы хранят временные метки в полях созданных в БД в указанное время. Но, конечно, мы запускаем наши отчеты как PDT.
Я хочу установить часовой пояс по умолчанию для Америки /Los_Angeles. Чтобы:
d = Chronic.parse("1 days ago at midnight")
date = d.localtime #Should give me a date like "2013-05-27 00:00:00"
utc_date = date.utc #Should give me a date like "2013-05-27 07:00:00"
Как я могу сделать это?
1 ответ
Я бы опубликовал это в качестве комментария, так как мне неудобно брать на себя ответственность за то, что в основном является чьим-то ответом, но мне не хватит места в комментариях. TZ
В этих ситуациях полезна переменная окружения. Взгляните на это:
def with_time_zone(tz_name)
prev_tz = ENV['TZ']
ENV['TZ'] = tz_name
yield
ensure
ENV['TZ'] = prev_tz
end
with_time_zone('US/Pacific') { Chronic.parse("1 days ago at midnight") }
# => 2013-05-27 08:00:00 0100
with_time_zone('US/Pacific') { Chronic.parse("1 days ago at midnight").localtime }
# => 2013-05-27 00:00:00 -0700
Вы можете установить локальное время сервера с правильной зоной, заставить все приложение работать с TZ
var устанавливай как хочешь, или манипулируй временем на выходе.