Расчет даты в будущем или прошлом

Clojure:
Расчет даты в будущем или прошлом

Как:

В Clojure вы в основном будете использовать библиотеку clj-time для операций с датами. Вот быстрый пример:

(require '[clj-time.core :as time])
(require '[clj-time.coerce :as coerce])
(require '[clj-time.periodic :as periodic])

;; Добавить 5 дней к текущей дате
(let [now (time/now)
      five-days (time/plus now (time/days 5))]
  (str "Через пять дней: " (coerce/to-string five-days)))

;; Вычесть 10 дней из конкретной даты
(let [specific-date (coerce/to-date-time "2023-03-01T12:00:00.000Z")
      ten-days-ago (time/minus specific-date (time/days 10))]
  (str "Десять дней до 1 марта 2023: " (coerce/to-string ten-days-ago)))

Пример вывода:

"Через пять дней: 2023-03-23Т08:00:00.000Z"
"Десять дней до 1 марта 2023: 2023-02-19Т12:00:00.000Z"

Подробнее

В прошлые дни программисты использовали классы Date и Calendar Java. Но, давайте будем честными, это головная боль — громоздкие и склонные к ошибкам. Библиотека clj-time принесла некоторый порядок, обернув более дружественный к разработчику API Joda-Time.

Альтернативы? Java 8 ввела java.time (JSR-310), которая довольно хороша, но в мире Clojure мы все еще уютно с clj-time.

При расчете дат вы используете периоды для понятий вроде “дни” и “месяцы” и продолжительности для точных счетов миллисекунд. Имейте в виду часовые пояса — даты и времена могут драматически изменяться в зависимости от правил часового пояса, а летнее время (DST) может внести свои коррективы.

Смотрите также