Преобразование строки даты в определенный формат часового пояса - PullRequest
2 голосов
/ 19 сентября 2019
Rails 5.2.3

У меня есть дата:

"Apr-03-2013 17:47:00"

У меня есть дата:

"America/Los_Angeles"

Я пытаюсь превратить ее в строку:

"Apr-03-2013 17:47:00 Pacific Daylight Time (GMT-07)"

Лучшее, что я могу придумать:

time_obj = ActiveSupport::TimeZone["America/Los_Angeles"].parse("2013-04-03 17:47:00")
Time.at(time_obj).strftime("%b-%d-%Y %H:%M:%S %Z")

Что дает мне:

"Apr-03-2013 17:47:00 PDT"

Есть идеи?

1 Ответ

1 голос
/ 20 сентября 2019

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

Использование %Z с strftime даст вам то, что когда-либо нравится вашей ОС, и тамнесколько оговорок в документах ruby ​​.

Одна идея, из которой вы можете получить некоторый пробег: если вы начинаете с идентификатора часового пояса, такого как "America / Los_Angeles", то вы можете использовать ActiveSupport :: TimeZone :: MAPPING, чтобы получить более дружелюбное имя, илипо крайней мере, имя часового пояса Rails.

например:

ActiveSupport::TimeZone::MAPPING.key("America/Los_Angeles")
=> "Pacific Time (US & Canada)"

Но это не сработает для каждого идентификатора:

ActiveSupport::TimeZone::MAPPING.key("America/Detroit")
=> nil

Вы можете увидеть, какие из них будуткарта вот так:

TZInfo::Country.get('US').zone_identifiers.map {|ident| [ident, ActiveSupport::TimeZone::MAPPING.key(ident)] }

Так что в этом случае вам нужно обратиться к имеющемуся у вас идентификатору, или, возможно, этот подход может сработать.

Тогда вы 'Мне нужно разобраться с частью перехода на летнее время, здесь вы можете использовать dst?

ActiveSupport::TimeZone["America/Los_Angeles"].parse("2013-04-03 17:47:00").dst?

Тогда вам нужно соединить все это вместе!... и добавить смещение.

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