Как я могу "разобрать" дату в определенном часовом поясе?

Используя clj-time, я могу разобрать дату и время, выполнив

(def timestamp (format/parse (formatters :date-time-no-ms)
                             "2013-06-03T23:00:00-0500"))
;=> #<DateTime 2013-06-04T04:00:00.000Z>

Я могу преобразовать это обратно в строку, выполнив

(unparse (formatters :year-month-day) timestamp)
;=> "2013-06-04"

Это год, месяц и день этого момента в часовом поясе UTC. Как я могу получить непарсированную версию DateTime относительно другого часового пояса? Например, для приведенного выше примера я хочу указать часовой пояс UTC–5 и получить строку "2013-06-03". Я играл с from-time-zone а также to-time-zone но не могу найти правильную комбинацию функций и аргументов.

1 ответ

Решение

Вы хотите использовать clj-time.format/with-zone:

(require '(clj-time [core :as time] [format :as timef]))

(timef/unparse (timef/with-zone (:date-time-no-ms timef/formatters)
                  (time/time-zone-for-id "America/Chicago"))
               (time/now))
;= "2013-06-02T15:20:03-05:00"
Другие вопросы по тегам