- static pure nothrow @property @safe Duration zero();
- A of . It's shorter than doing something like
and more explicit than .
- static pure nothrow @property @safe Duration max();
- Largest possible.
- static pure nothrow @property @safe Duration min();
- Most negative possible.
- const pure nothrow @safe int opCmp(Duration rhs);
- Compares this with the given .
Returns:
this < rhs | < 0 |
this == rhs | 0 |
this > rhs | > 0 |
- const pure nothrow @safe Duration opBinary(string op, D)(D rhs) if ((op == "+" || op == "-") && (is(_Unqual!D == Duration) || is(_Unqual!D == TickDuration)));
- Adds or subtracts two durations.
The legal types of arithmetic for using this operator are
Duration | + | Duration | --> | Duration |
Duration | - | Duration | --> | Duration |
Duration | + | TickDuration | --> | Duration |
Duration | - | TickDuration | --> | Duration |
Params:
D rhs |
The duration to add to or subtract from this . |
- const pure nothrow @safe Duration opBinaryRight(string op, D)(D lhs) if ((op == "+" || op == "-") && is(_Unqual!D == TickDuration));
- Adds or subtracts two durations.
The legal types of arithmetic for using this operator are
TickDuration | + | Duration | --> | Duration |
TickDuration | - | Duration | --> | Duration |
Params:
D lhs |
The to add to this or to
subtract this from. |
- pure nothrow ref @safe Duration opOpAssign(string op, D)(in D rhs) if ((op == "+" || op == "-") && (is(_Unqual!D == Duration) || is(_Unqual!D == TickDuration)));
- Adds or subtracts two durations as well as assigning the result to this
.
The legal types of arithmetic for using this operator are
Duration | + | Duration | --> | Duration |
Duration | - | Duration | --> | Duration |
Duration | + | TickDuration | --> | Duration |
Duration | - | TickDuration | --> | Duration |
Params:
D rhs |
The duration to add to or subtract from this . |
- const pure nothrow @safe Duration opBinary(string op)(long value) if (op == "*");
- The legal types of arithmetic for using this operator
overload are
Duration | * | long | --> | Duration |
Params:
long value |
The value to multiply this by. |
- pure nothrow ref @safe Duration opOpAssign(string op)(long value) if (op == "*");
- The legal types of arithmetic for using this operator
overload are
Duration | * | long | --> | Duration |
Params:
long value |
The value to multiply this by. |
- const pure @safe Duration opBinary(string op)(long value) if (op == "/");
- The legal types of arithmetic for using this operator
overload are
Duration | / | long | --> | Duration |
Params:
long value |
The value to divide from this duration. |
Throws:
if an attempt to divide by is made.
- pure ref @safe Duration opOpAssign(string op)(long value) if (op == "/");
- The legal types of arithmetic for using this operator
overload are
Duration | / | long | --> | Duration |
Params:
long value |
The value to divide from this . |
Throws:
if an attempt to divide by is made.
- const pure nothrow @safe Duration opBinaryRight(string op)(long value) if (op == "*");
- Multiplies an integral value and a .
The legal types of arithmetic for using this operator
overload are
long | * | Duration | --> | Duration |
Params:
long value |
The number of units to multiply this by. |
- const pure nothrow @safe Duration opUnary(string op)() if (op == "-");
- Returns the negation of this .
- const pure nothrow @safe TickDuration opCast(T)() if (is(_Unqual!T == TickDuration));
- Returns a with the same number of hnsecs as this
.
Note that the conventional way to convert between and
is using , e.g.:
- template split(units...) if (allAreAcceptedUnits!("weeks", "days", "hours", "minutes", "seconds", "msecs", "usecs", "hnsecs", "nsecs")(units) && unitsAreInDescendingOrder(units))
- Splits out the Duration into the given units.
split takes the list of time units to split out as template arguments.
The time unit strings must be given in decreasing order. How it returns
the values for those units depends on the overload used.
The overload which accepts function arguments takes integral types in
the order that the time unit strings were given, and those integers are
passed by . split assigns the values for the units to each
corresponding integer. Any integral type may be used, but no attempt is
made to prevent integer overflow, so don't use small integral types in
circumstances where the values for those units aren't likely to fit in
an integral type that small.
The overload with no arguments returns the values for the units in a
struct with members whose names are the same as the given time unit
strings. The members are all s. This overload will also work
with no time strings being given, in which case all of the time
units from weeks through hnsecs will be provided (but no nsecs, since it
would always be ).
For both overloads, the entire value of the Duration is split among the
units (rather than splitting the Duration across all units and then only
providing the values for the requested units), so if only one unit is
given, the result is equivalent to .
is accepted by split, but and
are not.
For negative durations, all of the split values will be negative.
Examples:
{
auto d = dur!"days"(12) + dur!"minutes"(7) + dur!"usecs"(501223);
long days;
int seconds;
short msecs;
d.split!("days", "seconds", "msecs")(days, seconds, msecs);
assert(days == 12);
assert(seconds == 7 * 60);
assert(msecs == 501);
auto splitStruct = d.split!("days", "seconds", "msecs")();
assert(splitStruct.days == 12);
assert(splitStruct.seconds == 7 * 60);
assert(splitStruct.msecs == 501);
auto fullSplitStruct = d.split();
assert(fullSplitStruct.weeks == 1);
assert(fullSplitStruct.days == 5);
assert(fullSplitStruct.hours == 0);
assert(fullSplitStruct.minutes == 7);
assert(fullSplitStruct.seconds == 0);
assert(fullSplitStruct.msecs == 501);
assert(fullSplitStruct.usecs == 223);
assert(fullSplitStruct.hnsecs == 0);
assert(d.split!"minutes"().minutes == d.total!"minutes");
}
{
auto d = dur!"days"(12);
assert(d.split!"weeks"().weeks == 1);
assert(d.split!"days"().days == 12);
assert(d.split().weeks == 1);
assert(d.split().days == 5);
}
{
auto d = dur!"days"(7) + dur!"hnsecs"(42);
assert(d.split!("seconds", "nsecs")().nsecs == 4200);
}
{
auto d = dur!"days"(-7) + dur!"hours"(-9);
auto result = d.split!("days", "hours")();
assert(result.days == -7);
assert(result.hours == -9);
}
- const pure nothrow @safe void split(Args...)(out Args args) if (units.length != 0 && args.length == units.length && allAreMutableIntegralTypes!Args);
const pure nothrow @safe auto split();
- Ditto
- const pure nothrow @safe long get(string units)() if (units == "weeks" || units == "days" || units == "hours" || units == "minutes" || units == "seconds");
- Deprecated. Please use instead. Too frequently,
get or one of the individual unit getters is used when the
function that gave the desired behavior was . This
should make it more explicit and help prevent bugs. This function
will be removed in June 2015.
Returns the number of the given units in this
(minus the larger units).
is equivalent to .
Examples:
assert(dur!"weeks"(12).get!"weeks" == 12);
assert(dur!"weeks"(12).get!"days" == 0);
assert(dur!"days"(13).get!"weeks" == 1);
assert(dur!"days"(13).get!"days" == 6);
assert(dur!"hours"(49).get!"days" == 2);
assert(dur!"hours"(49).get!"hours" == 1);
- deprecated const pure nothrow @property @safe long weeks();
- Deprecated. Please use instead. Too frequently,
or one of the individual unit getters is used when the
function that gave the desired behavior was . This
should make it more explicit and help prevent bugs. This function
will be removed in June 2015.
Returns the number of weeks in this
(minus the larger units).
Examples:
assert(dur!"weeks"(12).weeks == 12);
assert(dur!"days"(13).weeks == 1);
- deprecated const pure nothrow @property @safe long days();
- Deprecated. Please use instead. Too frequently,
or one of the individual unit getters is used when the
function that gave the desired behavior was . This
should make it more explicit and help prevent bugs. This function
will be removed in June 2015.
Returns the number of days in this
(minus the larger units).
Examples:
assert(dur!"weeks"(12).days == 0);
assert(dur!"days"(13).days == 6);
assert(dur!"hours"(49).days == 2);
- deprecated const pure nothrow @property @safe long hours();
- Deprecated. Please use instead. Too frequently,
or one of the individual unit getters is used when the
function that gave the desired behavior was . This
should make it more explicit and help prevent bugs. This function
will be removed in June 2015.
Returns the number of hours in this
(minus the larger units).
Examples:
assert(dur!"days"(8).hours == 0);
assert(dur!"hours"(49).hours == 1);
assert(dur!"minutes"(121).hours == 2);
- deprecated const pure nothrow @property @safe long minutes();
- Deprecated. Please use instead. Too frequently,
or one of the individual unit getters is used when the
function that gave the desired behavior was . This
should make it more explicit and help prevent bugs. This function
will be removed in June 2015.
Returns the number of minutes in this
(minus the larger units).
Examples:
assert(dur!"hours"(47).minutes == 0);
assert(dur!"minutes"(127).minutes == 7);
assert(dur!"seconds"(121).minutes == 2);
- deprecated const pure nothrow @property @safe long seconds();
- Deprecated. Please use instead. Too frequently,
or one of the individual unit getters is used when the
function that gave the desired behavior was . This
should make it more explicit and help prevent bugs. This function
will be removed in June 2015.
Returns the number of seconds in this
(minus the larger units).
Examples:
assert(dur!"minutes"(47).seconds == 0);
assert(dur!"seconds"(127).seconds == 7);
assert(dur!"msecs"(1217).seconds == 1);
- deprecated const pure nothrow @property @safe FracSec fracSec();
- Deprecated. Please use instead. Too frequently,
or one of the individual unit getters is used when the
function that gave the desired behavior was . This
should make it more explicit and help prevent bugs. This function
will be removed in June 2015.
Returns the fractional seconds past the second in this .
Examples:
assert(dur!"msecs"(1000).fracSec == FracSec.from!"msecs"(0));
assert(dur!"msecs"(1217).fracSec == FracSec.from!"msecs"(217));
assert(dur!"usecs"(43).fracSec == FracSec.from!"usecs"(43));
assert(dur!"hnsecs"(50_007).fracSec == FracSec.from!"hnsecs"(50_007));
assert(dur!"nsecs"(62_127).fracSec == FracSec.from!"nsecs"(62_100));
assert(dur!"msecs"(-1000).fracSec == FracSec.from!"msecs"(-0));
assert(dur!"msecs"(-1217).fracSec == FracSec.from!"msecs"(-217));
assert(dur!"usecs"(-43).fracSec == FracSec.from!"usecs"(-43));
assert(dur!"hnsecs"(-50_007).fracSec == FracSec.from!"hnsecs"(-50_007));
assert(dur!"nsecs"(-62_127).fracSec == FracSec.from!"nsecs"(-62_100));
- const pure nothrow @property @safe long total(string units)() if (units == "weeks" || units == "days" || units == "hours" || units == "minutes" || units == "seconds" || units == "msecs" || units == "usecs" || units == "hnsecs" || units == "nsecs");
- Returns the total number of the given units in this .
So, unlike , it does not strip out the larger units.
Examples:
assert(dur!"weeks"(12).total!"weeks" == 12);
assert(dur!"weeks"(12).total!"days" == 84);
assert(dur!"days"(13).total!"weeks" == 1);
assert(dur!"days"(13).total!"days" == 13);
assert(dur!"hours"(49).total!"days" == 2);
assert(dur!"hours"(49).total!"hours" == 49);
assert(dur!"nsecs"(2007).total!"hnsecs" == 20);
assert(dur!"nsecs"(2007).total!"nsecs" == 2000);
- const pure nothrow @safe string toString();
- Converts this to a .
- const pure nothrow @property @safe bool isNegative();
- Returns whether this is negative.