How do I check if a meeting time is before noon in EK9?
← Operators and Expressions · Ref: Q1187
EK9 Time values use the same comparison operators as every other type. Write time literals as HH:MM or HH:MM:SS.
TIME LITERALS
meetingTime <- 09:30 noon <- 12:00 precise <- 14:30:45
COMPARISON
if meetingTime < noon check if before noon ordering <- meetingTime <=> noon negative = earlier, zero = same, positive = later
COALESCING
earlierTime <- meetingTime <? noon returns whichever is earlier
All comparison operators (< > <= >= == <> <=>) work identically on Time, Date, Integer, String, and any type that implements them.
See Q542 for full temporal comparison. See Q31 for Date and Time basics.
Example
defines module qa.operators.comparetimes defines function <?- Check if a time is before another time. -?> isBeforeTime() as pure -> check as Time against as Time <- rtn as Boolean: check < against <?- Compare two times and return spaceship ordering. -?> compareTimes() as pure -> left as Time right as Time <- rtn as Integer: left <=> right <?- Return the earlier of two times using coalescing min. -?> earlierOf() as pure -> left as Time right as Time <- rtn as Time: left <? right <?- Return the later of two times using coalescing max. -?> laterOf() as pure -> left as Time right as Time <- rtn as Time: left >? right defines program CompareTimesDemo() stdout <- Stdout() // === TIME LITERALS === meetingTime <- 09:30 noon <- 12:00 afternoon <- 14:30:45 // === IS THE MEETING BEFORE NOON? === isMorning <- isBeforeTime(meetingTime, noon) stdout.println(`Meeting is morning: ${isMorning}`) isAfternoonLater <- isBeforeTime(noon, afternoon) stdout.println(`Afternoon after noon: ${isAfternoonLater}`) // === SPACESHIP ORDERING VIA FUNCTION === ordering <- compareTimes(meetingTime, noon) stdout.println(`Meeting <=> noon: ${ordering}`) // === COALESCING: FIND EARLIEST AND LATEST === earlierTime <- earlierOf(meetingTime, noon) laterTime <- laterOf(meetingTime, noon) stdout.println(`Earlier: ${earlierTime}`) stdout.println(`Later: ${laterTime}`) // === SORTED TIME LIST VIA STREAM === times <- List() of Time times += afternoon times += meetingTime times += noon sorted <- cat times | sort | collect as List of Time stdout.println(`Sorted times: ${sorted}`) // === STRING AND ISSET === timeStr <- $meetingTime stdout.println(`Time string: ${timeStr}`) require meetingTime? unsetTime <- Time() require ~unsetTime?
Common mistakes
E50060 — Time has no isBefore() method; compare Time values directly with the < operator. See ek9 -h E50060 for details.
Incorrect:
<- rtn as Boolean: check.isBefore(against)
Correct:
<- rtn as Boolean: check < against
Other ways to ask this
- Compare two Time values to see which is earlier.
- I need to determine whether a scheduled time falls in the morning.
- In Python I compared datetime.time objects — how does EK9 handle this?
Coming from another language?
Java: LocalTime.isBefore(), compareTo(). Python: direct operators on datetime.time. Rust: PartialOrd on chrono::NaiveTime. Go: no built-in time-of-day type, use time.Time methods. EK9: direct < > == operators on Time literals, consistent with all types.
Keywords: temporal, clock, afternoon, morning, operator, time, before, compare, noon