Shared core of time utils used by the internal CLJ and CLJS implementations. See [[metabase.util.time]] for the public interface. | (ns metabase.util.time.impl-common) |
(defn- by-unit [_ {:keys [unit]}] (keyword unit)) | |
Given a datetime and a unit (eg. "hour"), returns an inclusive datetime range as a pair of datetimes. For a unit of an hour, and a datetime for 13:49:28, that means [13:00:00 13:59:59.999], ie. 1 ms before the end. | (defmulti to-range
{:arglists '([value options])}
by-unit) |
Given a string representation of a datetime and the | (defmulti string->timestamp
{:arglists '([value options])}
by-unit) |
Given a numeric representation of a datetime and the Note that for two relative units - Returns a platform-specific datetime. | (defmulti number->timestamp
{:arglists '([value options])}
by-unit) |
(def ^:private year-part
"\\d{4}") | |
(def ^:private month-part
"\\d{2}") | |
(def ^:private day-part
"\\d{2}") | |
(def ^:private date-part (str year-part \- month-part \- day-part)) | |
(def ^:private hour-part
"\\d{2}") | |
(def ^:private minutes-part
"\\d{2}") | |
(defn- optional [& parts] (str "(?:" (apply str parts) ")?")) | |
(def ^:private seconds-milliseconds-part
(str ":\\d{2}" (optional "\\.\\d{1,6}"))) | |
(def ^:private time-part (str hour-part \: minutes-part (optional seconds-milliseconds-part))) | |
(def ^:private date-time-part (str date-part "[T ]" time-part)) | |
(def ^:private offset-part (str "(?:Z|(?:[+-]" time-part "))")) | |
Regex for a zone-offset string. | (def zone-offset-part-regex (re-pattern offset-part)) |
Regex for a local-date string. | (def ^:const local-date-regex (re-pattern (str \^ date-part \$))) |
Regex for a local-time string. | (def ^:const local-time-regex (re-pattern (str \^ time-part \$))) |
Regex for an offset-time string. | (def ^:const offset-time-regex (re-pattern (str \^ time-part offset-part \$))) |
Regex for a local-datetime string. | (def ^:const local-datetime-regex (re-pattern (str \^ date-time-part \$))) |
Regex for an offset-datetime string. | (def ^:const offset-datetime-regex (re-pattern (str \^ date-time-part offset-part \$))) |
Regex for a year-month literal string. | (def ^:const year-month-regex (re-pattern (str \^ year-part \- month-part \$))) |
Regex for a year literal string. | (def ^:const year-regex (re-pattern (str \^ year-part \$))) |
Matches a local time string. | (defn matches-time? [input] (boolean (re-matches local-time-regex input))) |
Matches a local date string. | (defn matches-date? [input] (boolean (re-matches local-date-regex input))) |
Matches a local AND offset date time string. | (defn matches-date-time? [input] (boolean (re-matches (re-pattern (str date-time-part (optional offset-part))) input))) |
Strips off a trailing +0500, -0430, or Z from a time string. | (defn drop-trailing-time-zone
[time-str]
(or (second (re-matches (re-pattern (str "(.*?)" (optional offset-part) \$)) time-str))
time-str)) |
Mapping of human-friendly keywords to literal month numbers. 1 = January. | (def ^:const month-keywords
{:jan 1
:feb 2
:mar 3
:apr 4
:may 5
:jun 6
:jul 7
:aug 8
:sep 9
:oct 10
:nov 11
:dec 12}) |