The OpenD Programming Language

Duration

Represents a duration of time of weeks or less (kept internally as hnsecs). (e.g. 22 days or 700 seconds).

It is used when representing a duration of time - such as how long to sleep with core.thread.Thread.sleep.

In std.datetime, it is also used as the result of various arithmetic operations on time points.

Use the dur function or one of its non-generic aliases to create Durations.

It's not possible to create a Duration of months or years, because the variable number of days in a month or year makes it impossible to convert between months or years and smaller units without a specific date. So, nothing uses Durations when dealing with months or years. Rather, functions specific to months and years are defined. For instance, std.datetime.Date has add!"years" and add!"months" for adding years and months rather than creating a Duration of years or months and adding that to a std.datetime.Date. But Duration is used when dealing with weeks or smaller.

Members

Functions

opBinary
Duration opBinary(Duration rhs)

Adds, subtracts or calculates the modulo of two durations.

opBinary
Duration opBinary(long value)

Multiplies or divides the duration by an integer value.

opBinary
long opBinary(Duration rhs)

Divides two durations.

opBinaryRight
deprecated Duration opBinaryRight(D lhs)

TickDuration is Deprecated

opBinaryRight
Duration opBinaryRight(long value)

Multiplies an integral value and a Duration.

opCast
deprecated TickDuration opCast()

TickDuration is Deprecated

opCast
bool opCast()

Allow Duration to be used as a boolean.

opCmp
int opCmp(Duration rhs)

Compares this Duration with the given Duration.

opOpAssign
Duration opOpAssign(Duration rhs)

Adds, subtracts or calculates the modulo of two durations as well as assigning the result to this Duration.

opOpAssign
Duration opOpAssign(long value)

Multiplies/Divides the duration by an integer value as well as assigning the result to this Duration.

opUnary
Duration opUnary()

Returns the negation of this Duration.

toString
void toString(SinkT sink)

Converts this Duration to a string.

toString
string toString()

Returns the total number of the given units in this Duration. So, unlike split, it does not strip out the larger units.

Properties

isNegative
bool isNegative [@property getter]

Returns whether this Duration is negative.

max
Duration max [@property getter]

Largest Duration possible.

min
Duration min [@property getter]

Most negative Duration possible.

total
long total [@property getter]

Returns the total number of the given units in this Duration. So, unlike split, it does not strip out the larger units.

zero
Duration zero [@property getter]

A Duration of 0. It's shorter than doing something like dur!"seconds"(0) and more explicit than Duration.init.

Templates

split
template split(units...)

Splits out the Duration into the given units.

Examples

import std.datetime;

assert(dur!"days"(12) == dur!"hnsecs"(10_368_000_000_000L));
assert(dur!"hnsecs"(27) == dur!"hnsecs"(27));
assert(std.datetime.Date(2010, 9, 7) + dur!"days"(5) ==
       std.datetime.Date(2010, 9, 12));

assert(days(-12) == dur!"hnsecs"(-10_368_000_000_000L));
assert(hnsecs(-27) == dur!"hnsecs"(-27));
assert(std.datetime.Date(2010, 9, 7) - std.datetime.Date(2010, 10, 3) ==
       days(-26));
import core.time;

// using the dur template
auto numDays = dur!"days"(12);

// using the days function
numDays = days(12);

// alternatively using UFCS syntax
numDays = 12.days;

auto myTime = 100.msecs + 20_000.usecs + 30_000.hnsecs;
assert(myTime == 123.msecs);

Meta