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