Dates and times
A date, time, or date-time starts with @ and uses ISO order: year, month,
day. Other date spellings are not recognised.
@2026-05-27
@14:30
@2026-05-27T14:30
@2026-05-27T12:00Z
at joins a date and a time. in attaches a time zone. to shows the same
moment in another zone.
@2026-06-26 at @17:00
@2026-06-26 at @17:00 in Europe/London
@2026-06-26 at @17:00 in Europe/London to America/New_York
@2026-06-26 at @17:00 in Europe/London to Asia/Tokyo
now, today, tomorrow, and yesterday come from the clock. A bare
time such as @14:30 means today at that time.
now
today
tomorrow
Date arithmetic
Section titled “Date arithmetic”Add or subtract a duration. Whole months and years move by the calendar, clamping to the end of a short month.
@2026-05-27 + 1 day
@2026-06-26 + 3 weeks
@2026-01-31 + 1 month
@2028-01-31 + 1 month
The difference of two dates is a duration. Ask for the units you want.
@2026-12-25 - @2026-06-26
@2026-12-25 - today to days
today - @1969-07-20 to years, days to 0 dp
The words ago, hence, before, and after read like English.
3 days ago
2 weeks hence
2 days before @2026-06-22
2 hours after @09:00
Dates compare with the usual operators.
@2026-06-22 < @2026-06-23
date, time, and timezone take an instant apart.
date(now)
time(now)
timezone(@2026-06-26 at @17:00 in Europe/Berlin)
Time zones and daylight saving
Section titled “Time zones and daylight saving”default timezone: gives every zoneless date-time in the document a zone.
smoot resolves daylight saving per zone and per date, so the same meeting can
land at a different hour abroad in the weeks when only one side has changed
its clocks.
default timezone: Europe/Berlin
sync = @2026-05-04T16:00
sync to America/New_York
autumn = @2026-10-28T16:00
autumn to America/New_York
Zones can be IANA names (Europe/Berlin), fixed offsets (UTC+4,
UTC-05:30), or UTC. A zone is a value: tz = Europe/Paris then
now to tz.