Как установить часовой пояс по умолчанию для 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 устанавливай как хочешь, или манипулируй временем на выходе.

Другие вопросы по тегам