Skip to content

std/duration

Import with import std/duration.

Types

type Duration Int

opaque — construction surface is private to its defining module

A length of time — a fixed span, independent of any wall clock or calendar. Backed by nanoseconds (opaque type Duration Int), so sub-second spans (timeouts, sleep intervals, elapsed measurements) compose precisely. Construct with unit functions (Duration.seconds(5), Duration.milliseconds(250)); inspect via the Duration.as_* accessors; combine via Duration.add, +, Duration.subtract, -, Duration.multiply, *, and /; compare via Comparable / ==.

Duration is a time-domain quantity and deliberately does not interact with Date; civil calendar and wall-clock arithmetic use Civil.* period types from std/calendar. It pairs with Instant (Instant.add / Instant.between) and backs Timer.sleep / Context.with_timeout.

fn nanoseconds(n: Int): Duration

type function on Duration

Construct a Duration from whole nanoseconds.

Interactive Tests

assert Duration.as_nanos(Duration.nanoseconds(42)) == 42
fn microseconds(n: Int): Duration

type function on Duration

Construct a Duration from whole microseconds.

Interactive Tests

assert Duration.to_string(Duration.microseconds(1)) == "1µs"
assert Duration.as_nanos(Duration.microseconds(2)) == 2000
fn milliseconds(n: Int): Duration

type function on Duration

Construct a Duration from whole milliseconds.

Interactive Tests

assert Duration.as_millis(Duration.milliseconds(1500)) == 1500
fn seconds(n: Int): Duration

type function on Duration

Construct a Duration from whole seconds.

Interactive Tests

assert Duration.as_seconds(Duration.seconds(5)) == 5
assert Duration.seconds(5) == Duration.milliseconds(5000)
fn minutes(n: Int): Duration

type function on Duration

Construct a Duration from whole minutes.

Interactive Tests

assert Duration.as_seconds(Duration.minutes(3)) == 180
fn hours(n: Int): Duration

type function on Duration

Construct a Duration from whole hours.

Interactive Tests

assert Duration.to_string(Duration.hours(1)) == "1h"
fn as_nanos(Duration(ns)): Int

type function on Duration

Total whole nanoseconds in the Duration (the exact magnitude).

Interactive Tests

assert Duration.as_nanos(Duration.microseconds(2)) == 2000
fn as_micros(Duration(ns)): Int

type function on Duration

Total whole microseconds, truncating any sub-microsecond remainder.

Interactive Tests

assert Duration.as_micros(Duration.milliseconds(2)) == 2000
fn as_millis(Duration(ns)): Int

type function on Duration

Total whole milliseconds, truncating any sub-millisecond remainder.

Interactive Tests

assert Duration.as_millis(Duration.seconds(2)) == 2000
fn as_seconds(Duration(ns)): Int

type function on Duration

Total whole seconds, truncating any sub-second remainder.

Interactive Tests

assert Duration.as_seconds(Duration.minutes(3)) == 180
fn as_minutes(Duration(ns)): Int

type function on Duration

Total whole minutes, truncating any sub-minute remainder.

Interactive Tests

assert Duration.as_minutes(Duration.hours(2)) == 120
fn as_hours(Duration(ns)): Int

type function on Duration

Total whole hours, truncating any sub-hour remainder.

Interactive Tests

assert Duration.as_hours(Duration.minutes(150)) == 2

impl Add

fn add(Duration(a), Duration(b)): Duration

impl Add.add

Sum of two Durations.

Interactive Tests

assert Duration.add(
  Duration.seconds(1),
  Duration.milliseconds(500),
) == Duration.milliseconds(1500)
assert Duration.seconds(1) + Duration.milliseconds(
  500
) == Duration.milliseconds(1500)

impl Subtract

fn subtract(Duration(a), Duration(b)): Duration

impl Subtract.subtract

Difference of two Durations (the first minus the second); may be negative.

Interactive Tests

assert Duration.subtract(
  Duration.seconds(1),
  Duration.seconds(3),
) == Duration.seconds(-2)
assert Duration.seconds(1) - Duration.seconds(3) == Duration.seconds(-2)

impl Multiply

fn multiply(Duration(ns), rhs: Int): Duration

impl Multiply.multiply

Multiply a Duration by an integer factor.

Interactive Tests

assert Duration.multiply(Duration.seconds(2), 3) == Duration.seconds(6)
assert Duration.seconds(2) * 3 == Duration.seconds(6)

impl Divide

fn divide(Duration(ns), rhs: Int): Duration

impl Divide.divide

Divide a Duration by an integer divisor.

Interactive Tests

assert Duration.seconds(6) / 3 == Duration.seconds(2)

impl Display

fn to_string(d: Duration): String

impl Display.to_string

Compact, human-readable rendering — decomposes into the largest units that fit (e.g. 1h30m, 250ms).

Interactive Tests

assert Duration.to_string(Duration.seconds(5)) == "5s"
assert Duration.to_string(Duration.milliseconds(1500)) == "1s500ms"
assert Duration.to_string(Duration.minutes(90)) == "1h30m"
assert Duration.to_string(Duration.nanoseconds(0)) == "0s"

impl Debug

fn inspect(d: Duration): String

impl Debug.inspect

Interactive Tests

assert Duration.inspect(Duration.seconds(5)) == "5s"

impl Equatable

fn equal?(a: Duration, b: Duration): Bool

impl Equatable.equal?

impl Hashable

fn hash(value: Duration): Int

impl Hashable.hash

impl Comparable

fn compare(a: Duration, b: Duration): Ordering

impl Comparable.compare