156 lines
3.9 KiB
Clojure
156 lines
3.9 KiB
Clojure
(ns DateTime
|
|
"Elixir DateTime module — date and time with timezone.
|
|
|
|
In CljElixir: (DateTime/utc-now), (DateTime/to-iso8601 dt), etc.")
|
|
|
|
(defn utc-now
|
|
"Returns the current UTC datetime.
|
|
(DateTime/utc-now) ;=> ~U[2024-03-09 12:00:00Z]
|
|
(DateTime/utc-now Calendar.ISO)"
|
|
([])
|
|
([calendar]))
|
|
|
|
(defn now
|
|
"Returns the current datetime for a timezone.
|
|
(DateTime/now \"Etc/UTC\") ;=> {:ok datetime}"
|
|
([timezone])
|
|
([timezone calendar]))
|
|
|
|
(defn now!
|
|
"Returns the current datetime. Raises on error.
|
|
(DateTime/now! \"Etc/UTC\")"
|
|
([timezone])
|
|
([timezone calendar]))
|
|
|
|
(defn new
|
|
"Creates a new DateTime.
|
|
(DateTime/new 2024 3 9 12 0 0)"
|
|
([date time])
|
|
([date time timezone])
|
|
([date time timezone database]))
|
|
|
|
(defn new!
|
|
"Creates a new DateTime. Raises on error."
|
|
([date time])
|
|
([date time timezone])
|
|
([date time timezone database]))
|
|
|
|
(defn from-unix
|
|
"Converts Unix timestamp to DateTime.
|
|
(DateTime/from-unix 1709985600) ;=> {:ok datetime}
|
|
(DateTime/from-unix 1709985600000 :millisecond)"
|
|
([integer])
|
|
([integer unit])
|
|
([integer unit calendar]))
|
|
|
|
(defn from-unix!
|
|
"Converts Unix timestamp. Raises on error.
|
|
(DateTime/from-unix! 1709985600)"
|
|
([integer])
|
|
([integer unit])
|
|
([integer unit calendar]))
|
|
|
|
(defn to-unix
|
|
"Converts DateTime to Unix timestamp.
|
|
(DateTime/to-unix datetime) ;=> 1709985600
|
|
(DateTime/to-unix datetime :millisecond)"
|
|
([datetime])
|
|
([datetime unit]))
|
|
|
|
(defn from-iso8601
|
|
"Parses ISO 8601 string. Returns {:ok datetime utc-offset}.
|
|
(DateTime/from-iso8601 \"2024-03-09T12:00:00Z\") ;=> {:ok datetime 0}"
|
|
([string])
|
|
([string calendar-or-format]))
|
|
|
|
(defn from-iso8601!
|
|
"Parses ISO 8601. Raises on error."
|
|
([string])
|
|
([string calendar-or-format]))
|
|
|
|
(defn to-iso8601
|
|
"Converts to ISO 8601 string.
|
|
(DateTime/to-iso8601 datetime) ;=> \"2024-03-09T12:00:00Z\""
|
|
([datetime])
|
|
([datetime format])
|
|
([datetime format offset]))
|
|
|
|
(defn to-string
|
|
"Converts to human-readable string.
|
|
(DateTime/to-string datetime) ;=> \"2024-03-09 12:00:00Z\""
|
|
[datetime])
|
|
|
|
(defn to-date
|
|
"Extracts the Date part.
|
|
(DateTime/to-date datetime) ;=> ~D[2024-03-09]"
|
|
[datetime])
|
|
|
|
(defn to-time
|
|
"Extracts the Time part.
|
|
(DateTime/to-time datetime) ;=> ~T[12:00:00]"
|
|
[datetime])
|
|
|
|
(defn to-naive
|
|
"Converts to NaiveDateTime (drops timezone info).
|
|
(DateTime/to-naive datetime) ;=> ~N[2024-03-09 12:00:00]"
|
|
[datetime])
|
|
|
|
(defn from-naive
|
|
"Converts NaiveDateTime to DateTime with timezone.
|
|
(DateTime/from-naive naive \"Etc/UTC\") ;=> {:ok datetime}"
|
|
([naive-datetime timezone])
|
|
([naive-datetime timezone database]))
|
|
|
|
(defn from-naive!
|
|
"Converts NaiveDateTime. Raises on error."
|
|
([naive-datetime timezone])
|
|
([naive-datetime timezone database]))
|
|
|
|
(defn add
|
|
"Adds `amount` of time to a datetime.
|
|
(DateTime/add datetime 3600) ;=> +1 hour
|
|
(DateTime/add datetime 1 :hour)"
|
|
([datetime amount])
|
|
([datetime amount unit]))
|
|
|
|
(defn diff
|
|
"Returns the difference between two datetimes.
|
|
(DateTime/diff dt1 dt2) ;=> seconds
|
|
(DateTime/diff dt1 dt2 :hour) ;=> hours"
|
|
([datetime1 datetime2])
|
|
([datetime1 datetime2 unit]))
|
|
|
|
(defn shift-zone
|
|
"Shifts datetime to a different timezone.
|
|
(DateTime/shift-zone datetime \"America/New_York\")"
|
|
([datetime timezone])
|
|
([datetime timezone database]))
|
|
|
|
(defn shift-zone!
|
|
"Shifts timezone. Raises on error."
|
|
([datetime timezone])
|
|
([datetime timezone database]))
|
|
|
|
(defn truncate
|
|
"Truncates datetime to given precision.
|
|
(DateTime/truncate datetime :second)"
|
|
[datetime precision])
|
|
|
|
(defn compare
|
|
"Compares two datetimes. Returns :lt, :eq, or :gt.
|
|
(DateTime/compare dt1 dt2) ;=> :lt"
|
|
[datetime1 datetime2])
|
|
|
|
(defn before?
|
|
"Returns true if `datetime1` is before `datetime2`."
|
|
[datetime1 datetime2])
|
|
|
|
(defn after?
|
|
"Returns true if `datetime1` is after `datetime2`."
|
|
[datetime1 datetime2])
|
|
|
|
(defn shift
|
|
"Shifts datetime by a duration.
|
|
(DateTime/shift datetime :hour 1 :minute 30)"
|
|
[datetime duration])
|