Files
integreat/src/clj/auto_ap/time.clj
2023-10-30 12:35:18 -07:00

55 lines
1.4 KiB
Clojure

(ns auto-ap.time
(:require [clj-time.core :as time]
[clj-time.format :as f]
[auto-ap.logging :as alog]))
(defn localize [d]
(time/to-time-zone d (time/time-zone-for-id "America/Los_Angeles")))
(defn as-local-time [d]
(time/from-time-zone d (time/time-zone-for-id "America/Los_Angeles")))
(defn local-now []
(time/to-time-zone (time/now) (time/time-zone-for-id "America/Los_Angeles")))
(def normal-date "MM/dd/yyyy")
(def iso-date "yyyy-MM-dd")
(def solr-date "yyyy-MM-dd'T'HH:mm:ss'Z'")
(def standard-time "MM/dd/yyyy hh:mm aa")
(defn parse-utc [v format]
(try
(f/parse (f/formatter format) v)
(catch Exception _
nil)))
(defn parse [v format]
(try
(time/from-time-zone (f/parse (f/formatter format) v)
(time/time-zone-for-id "America/Los_Angeles"))
(catch Exception _
nil)))
(defn unparse [v format]
(try
(f/unparse (f/formatter format) v)
(catch Exception e
(alog/warn ::cant-unparse :error e)
nil)))
(defn unparse-local [v format]
(try
(f/unparse (f/with-zone (f/formatter format) (time/time-zone-for-id "America/Los_Angeles")) v)
(catch Exception _
nil)))
(defn day-of-week-seq [day]
(let [next-day (loop [d (local-now)]
(if (= (time/day-of-week d) day)
d
(recur (time/plus d (time/days 1)))))]
(iterate #(time/plus % (time/days 7)) next-day)))