Time Library
Wall-clock time-of-day for legal rules involving time constraints. Uses 24-hour format internally with no date or timezone component.
Can be imported into L4 files with IMPORT time.
Location
Features
- Time construction from hours/minutes/seconds, serial numbers, strings, or DATETIME extraction
- AM/PM support via
Meridiem Indicatorenum - Time arithmetic (add/subtract hours, minutes, seconds) with midnight wrapping
- Time-of-day predicates (morning, afternoon, evening)
- Serial conversion (fraction of day: 0.0 = midnight, 0.5 = noon)
- Comparison operators and min/max functions
- String parsing for JSON interoperability
Key Functions
Constants:
Midnight- 00:00:00Noon- 12:00:00Hours in a day,Minutes in an hour,Seconds in a minute, etc.
Time Construction:
Time h m s- Create time from hours, minutes, secondsTime h m- Create time (seconds default to 0)Time h- Create time (minutes and seconds default to 0)Time h m s am/Time h m s pm- 12-hour AM/PM formatTime h am/Time h pm- Shorthand 12-hour formatTime str- Parse time string ("HH:MM:SS" or "HH:MM"), returns MAYBE TIMETime dt- Extract time from DATETIME (ignores date and timezone)serial Serial to time- Create time from day fraction
Time Extractors:
the hour oft - Get hour (0-23)the minute oft - Get minute (0-59)the second oft - Get second (0-59)
Time Arithmetic (wraps at midnight):
- t
plus hoursn, tminus hoursn - t
plus minutesn, tminus minutesn - t
plus secondsn, tminus secondsn
Predicates:
is morning- Before noon (hour < 12)is afternoon- 12:00 to 17:59is evening- 18:00 onwardsis before noon,is after noon
Comparators:
the earlier oft1 t2the later oft1 t2- t1
is beforet2, t1is aftert2 - Standard comparison operators: LESS THAN, GREATER THAN, AT MOST, AT LEAST
- TIME MINUS TIME returns difference in seconds
Example: Time Operations
-- Time Example: Wall-clock time operations
IMPORT time
-- Time construction (24-hour format)
DECIDE `office start` IS Time 9 0 0
DECIDE `lunch break` IS Time 12 30
DECIDE `end of day` IS Time 17
#EVAL `office start` -- 09:00:00
#EVAL `lunch break` -- 12:30:00
#EVAL `end of day` -- 17:00:00
-- Time from string (JSON interop) - returns MAYBE TIME
DECIDE `from string` IS Time "14:30:00"
#EVAL `from string` -- JUST OF (TIME OF 14, 30, 0.0)
-- AM/PM construction
DECIDE `early meeting` IS Time 7 30 am
DECIDE `dinner time` IS Time 7 pm
#EVAL `early meeting` -- 07:30:00
#EVAL `dinner time` -- 19:00:00
-- Extracting components
#EVAL `the hour of` `office start` -- 9
#EVAL `the minute of` `lunch break` -- 30
-- Time predicates
DECIDE `morning check` IS `office start` `is morning`
DECIDE `afternoon check` IS `lunch break` `is afternoon`
#EVAL `morning check` -- TRUE
#EVAL `afternoon check` -- TRUE
-- Time arithmetic (wraps at midnight)
DECIDE `plus two hours` IS `office start` `plus hours` 2
#EVAL `plus two hours` -- 11:00:00
DECIDE `minus one hour` IS `office start` `minus hours` 1
#EVAL `minus one hour` -- 08:00:00
-- Time comparisons
DECIDE `start before lunch` IS `office start` LESS THAN `lunch break`
#EVAL `start before lunch` -- TRUE
DECIDE `start is before lunch` IS `office start` `is before` `lunch break`
DECIDE `lunch is after start` IS `lunch break` `is after` `office start`
#EVAL `start is before lunch` -- TRUE
#EVAL `lunch is after start` -- TRUE
#EVAL `the earlier of` `office start` `lunch break` -- 09:00:00
#EVAL `the later of` `office start` `lunch break` -- 12:30:00
-- Serial conversion (fraction of day)
#EVAL (Time 12 0 0) `Time to serial` -- 0.5 (noon = half day)
#EVAL 0.5 `Serial to time` -- 12:00:00
See time.l4 source for all functions.