Date and Time (std::datetime)
std::datetime provides access to the current system instant, conversion between
Unix timestamps and calendar representations, formatting and parsing of date
strings, and simple day and hour arithmetic.
All examples below require the host and cannot be run in the browser WASM sandbox; run them with the Zolo CLI.
Current instant
datetime.now() returns an object with the fields year, month, day,
hour, minute, second, millisecond and timestamp (Unix seconds as a
float). The module also provides calendar predicates:
Reads the fields of the current instant and demonstrates is_leap_year / days_in_month.
// Feature: datetime.now — current instant
// When to use: timestamps for logs, time measurement, metadata.
use std::datetime
let now = datetime.now()
// Expected fields:
// year, month, day, hour, minute, second, millisecond, timestamp.
print(now.year >= 2024) // expected: true
print(now.month >= 1 && now.month <= 12) // expected: true
print(now.day >= 1 && now.day <= 31) // expected: true
print(now.hour >= 0 && now.hour <= 23) // expected: true
print(now.timestamp > 0.0) // expected: true
// Useful: extract just the year for a log header.
print("current year: {now.year}")
// is_leap_year — predicate.
print(datetime.is_leap_year(2024)) // expected: true
print(datetime.is_leap_year(2023)) // expected: false
// days_in_month.
print(datetime.days_in_month(2024, 2)) // expected: 29
print(datetime.days_in_month(2023, 2)) // expected: 28
print(datetime.days_in_month(2024, 7)) // expected: 31
Requires the Zolo CLI/host — open in the playground or run locally.
Formatting
datetime.to_iso produces a UTC ISO-8601 string; datetime.format accepts
%Y %m %d %H %M %S codes for custom output. Use
datetime.from_timestamp(seconds) to create an object from a static timestamp
and get deterministic results:
Converts the Unix epoch to human-readable strings with to_iso and format.
// Feature: datetime.format / datetime.to_iso — formatting dates
// When to use: produce human-readable or serializable strings (ISO-8601).
use std::datetime
// from_timestamp gives a stable, deterministic value.
// 0 = 1970-01-01T00:00:00Z (epoch).
let epoch = datetime.from_timestamp(0)
// to_iso — produces an ISO-8601 UTC string.
let iso = datetime.to_iso(epoch)
print(iso.starts_with("1970-01-01")) // expected: true
// format — uses codes: %Y (year), %m (month), %d (day),
// %H (hour), %M (min), %S (sec).
print(datetime.format(epoch, "%Y-%m-%d")) // expected: 1970-01-01
print(datetime.format(epoch, "%H:%M:%S")) // expected: 00:00:00
// to_iso also accepts a numeric timestamp directly.
print(datetime.to_iso(0).starts_with("1970")) // expected: true
Requires the Zolo CLI/host — open in the playground or run locally.
Parsing and arithmetic
datetime.parse detects the format automatically; datetime.from_timestamp
converts a number of seconds. add_days and add_hours operate on timestamps
(returning a new Int timestamp) — re-wrap with from_timestamp to read the
calendar fields:
Parses "2024-06-15", advances 3 days and 5 hours with timestamp arithmetic.
// Feature: datetime.parse / datetime.from_timestamp — input
// When to use: read dates coming from logs, configs, APIs.
use std::datetime
// from_timestamp — takes seconds since epoch.
let dt = datetime.from_timestamp(1700000000)
print(dt.year == 2023) // expected: true
// parse — format is auto-detected by default.
let parsed = datetime.parse("2024-06-15")
print(parsed.year) // expected: 2024
print(parsed.month) // expected: 6
print(parsed.day) // expected: 15
// add_days — calendar arithmetic. NOTE: add_days/add_hours operate
// on timestamps (Int seconds since epoch) and return a timestamp;
// re-wrap with from_timestamp to read calendar fields.
let plus3_ts = datetime.add_days(parsed.timestamp, 3)
let plus3 = datetime.from_timestamp(plus3_ts)
print(plus3.day) // expected: 18
// add_hours.
let plus5h_ts = datetime.add_hours(parsed.timestamp, 5)
let plus5h = datetime.from_timestamp(plus5h_ts)
print(plus5h.hour) // expected: 5
Requires the Zolo CLI/host — open in the playground or run locally.