Переметиться к: abs · ClockType · convClockFreq · convert · days · dur · Duration · FracSec · hnsecs · hours · minutes · MonoTime · MonoTimeImpl · msecs · nsecs · nsecsToTicks · seconds · TickDuration · ticksToNSecs · TimeException · to · usecs · weeks
Идентификатор | Описание |
---|---|
Типы | |
Duration | Представляет длительность (отрезок времени) в неделях или в меньших единицах (внутренне хранится в виде количества hnsecs) (например, 22 дня или 700 секунд). |
TickDuration |
Представляет интервал времени в тактовых импульсах системы, используя максимальную точность, которую система способна предоставить. Так как эта структура объявлена устаревшей (см. Предупреждение в её описании), то я не стал переводить описание всех её свойств и методов — прим. пер. |
MonoTime | Представляет монотонно увеличивающуюся временную метку в тактовых импульсах системы, используя максимальную точность, которую система способна предоставить. |
FracSec | Представляет дробные части секунды (отрезки времени меньше секунды). |
Функции | |
convert | Общий способ преобразования между двумя единицами измерения времени. |
dur | Позволяет построить Duration, используя заданные единицы времени с заданной длиной. |
weeks days hours minutes seconds msecs usecs hnsecs nsecs |
Удобные псевдонимы для dur. |
abs | Возвращает абсолютное значение duration (продолжительности). |
Из Duration | Из TickDuration | Из FracSec | Из единиц измерения | |
---|---|---|---|---|
В Duration | - | tickDuration.to!Duration() | - | dur!"msecs"(5) or 5.msecs() |
В TickDuration | duration.to!TickDuration() | - | - | TickDuration.from!"msecs"(msecs) |
В FracSec | duration.fracSec | - | - | FracSec.from!"msecs"(msecs) |
В единицы измерения | duration.total!"days" | tickDuration.msecs | fracSec.msecs | convert!("days", "msecs")(msecs) |
Исходный код: core/time.d
Переметиться к: bootTime · coarse · normal · precise · processCPUTime · raw · second · threadCPUTime · uptime · uptimeCoarse · uptimePrecise
Переметиться к: isNegative · max · min · opBinary · opBinaryRight · opCast · opCmp · opOpAssign · opUnary · split · toString · total · zero
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; // использование шаблона dur auto numDays = dur!"days"(12); // использование функции days numDays = days(12); // альтернативно с использованием синтаксиса UFCS numDays = 12.days; auto myTime = 100.msecs + 20_000.usecs + 30_000.hnsecs; assert(myTime == 123.msecs);
this < rhs | < 0 |
this == rhs | 0 |
this > rhs | > 0 |
Duration | + | Duration | --> | Duration |
Duration | - | Duration | --> | Duration |
Duration | % | Duration | --> | Duration |
Duration | + | TickDuration | --> | Duration |
Duration | - | TickDuration | --> | Duration |
D rhs | Длительность, добавляемая к или вычитаемая из этой Длительности. |
Переметиться к: 2
TickDuration | + | Duration | --> | Duration |
TickDuration | - | Duration | --> | Duration |
D lhs | TickDuration, к которой добавляется или из которой вычитается эта Duration. |
Переметиться к: 2
Duration | + | Duration | --> | Duration |
Duration | - | Duration | --> | Duration |
Duration | % | Duration | --> | Duration |
Duration | + | TickDuration | --> | Duration |
Duration | - | TickDuration | --> | Duration |
D rhs | Длительность, добавляемая к или вычитаемая из этой Duration. |
Duration | * | long | --> | Duration |
Duration | / | long | --> | Duration |
long value | Значение, на которое умножается или делится эта Duration. |
Duration | * | long | --> | Duration |
Duration | / | long | --> | Duration |
long value | Значение, на которое умножается или делится эта Duration. |
Duration | / | Duration | --> | long |
Duration rhs | Длительность, на которую делится эта Duration. |
long | * | Duration | --> | Duration |
long value | Количество единиц для умножения на эту Duration. |
Переметиться к: split
{ 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); // часы }
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); // наносекунды, наносекунды
units | Единицы в которые надо преобразовать. Принимает только "seconds" (секунды) и меньше. |
T | Тип, в который преобразовывать (тип целых чисел или тип с плавающей точкой). |
D td | Преобразуемый TickDuration |
auto t = TickDuration.from!"seconds"(1000); long tl = to!("seconds",long)(t); assert(tl == 1000); double td = to!("seconds",double)(t); assert(_abs(td - 1000) < 0.001);
units | Единицы времени для длительности Duration (например, "days"). |
long length | Количество единиц в Duration. |
// Обобщённый вариант assert(dur!"weeks"(142).total!"weeks" == 142); // недели assert(dur!"days"(142).total!"days" == 142); // дни assert(dur!"hours"(142).total!"hours" == 142); // часы assert(dur!"minutes"(142).total!"minutes" == 142); // минуты assert(dur!"seconds"(142).total!"seconds" == 142); // секунды assert(dur!"msecs"(142).total!"msecs" == 142); // миллисекунды assert(dur!"usecs"(142).total!"usecs" == 142); // микросекунды assert(dur!"hnsecs"(142).total!"hnsecs" == 142); // гекто-наносекунды assert(dur!"nsecs"(142).total!"nsecs" == 100); // наносекунды // Неуниверсальный вариант assert(weeks(142).total!"weeks" == 142); // недели assert(days(142).total!"days" == 142); // дни assert(hours(142).total!"hours" == 142); // часы assert(minutes(142).total!"minutes" == 142); // минуты assert(seconds(142).total!"seconds" == 142); // секунды assert(msecs(142).total!"msecs" == 142); // миллисекунды assert(usecs(142).total!"usecs" == 142); // микросекунды assert(hnsecs(142).total!"hnsecs" == 142); // гекто-наносекунды assert(nsecs(142).total!"nsecs" == 100); // наносекунды
Переметиться к: currTime · max · min · opBinary · opCmp · opOpAssign · ticks · ticksPerSecond · toString · zero
MonoTime before = MonoTime.currTime;
// что-то делать...
MonoTime after = MonoTime.currTime;
Duration timeElapsed = after - before;
MonoTime — это псевдоним для MonoTimeImpl!(ClockType.normal), большинство программ должно использовать именно его. Также он используется в большей части документации по MonoTimeImpl (особенно в примерах), потому что это наиболее частоупотебимый вариант для большинства программ. Но MonoTimeImpl можно создать с другими типами часов для тех редких программ, которые в этом нуждаются.
this < rhs | < 0 |
this == rhs | 0 |
this > rhs | > 0 |
Переметиться к: 2
MonoTime before = MonoTime.currTime; // что-то сделать MonoTime after = MonoTime.currTime; // Сколько времени это заняло. Duration timeElapsed = after - before;или использовать обертку (например, тип секундомера), которая делает это. Предупреждение: поскольку значение Duration хранится в единицах hnsec (гекто-наносекунды), тогда как значение MonoTime хранится в количестве системных тиков, в большинстве случаев это утверждение assert не будет выполнено:
auto before = MonoTime.currTime; // что-то сделать auto after = MonoTime.currTime; auto timeElapsed = after - before; assert(before + timeElapsed == after);Как правило, это нормально, и по самой своей сути преобразование из системных тиков в любой тип долей секунд (hnsecs, nsecs и т. д.) приведёт к ошибкам округления, но если код должен избегать любых небольших ошибок округления, привносимых преобразованием, тогда он должен использовать свойство ticks структуры MonoTime и сохранять все вычисления в тиках, а не использовать Duration.
// один тик - одна секунда -> один тик - одна гекто-наносекунда assert(convClockFreq(45, 1, 10_000_000) == 450_000_000); // один тик - одна микросекунда -> один тик - одна миллисекунда assert(convClockFreq(9029, 1_000_000, 1_000) == 9); // один тик - 1/3_515_654 секунды -> 1/1_001_010 секунды assert(convClockFreq(912_319, 3_515_654, 1_001_010) == 259_764); // один тик - 1/MonoTime.ticksPerSecond -> один тик - одна наносекунда // Эквивалентно ticksToNSecs auto nsecs = convClockFreq(1982, MonoTime.ticksPerSecond, 1_000_000_000);
auto before = MonoTime.currTime; // что-то сделать auto after = MonoTime.currTime; auto diffInTicks = after.ticks - before.ticks; auto diffInNSecs = ticksToNSecs(diffInTicks); assert(diffInNSecs == convClockFreq(diffInTicks, MonoTime.ticksPerSecond, 1_000_000_000));
units | The time units of the TickDuration (e.g. "msecs"). |
long length | The number of units in the TickDuration. |
TickDuration | += | TickDuration | --> | TickDuration |
TickDuration | -= | TickDuration | --> | TickDuration |
TickDuration rhs | The TickDuration to add to or subtract from this TickDuration. |
TickDuration | + | TickDuration | --> | TickDuration |
TickDuration | - | TickDuration | --> | TickDuration |
TickDuration rhs | The TickDuration to add to or subtract from this TickDuration. |
TickDuration | * | long | --> | TickDuration |
TickDuration | * | floating point | --> | TickDuration |
T value | The value to divide from this duration. |
TickDuration | / | long | --> | TickDuration |
TickDuration | / | floating point | --> | TickDuration |
T value | The value to divide from this TickDuration. |
TickDuration | * | long | --> | TickDuration |
TickDuration | * | floating point | --> | TickDuration |
T value | The value to divide from this TickDuration. |
TickDuration | / | long | --> | TickDuration |
TickDuration | / | floating point | --> | TickDuration |
T value | The value to divide from this TickDuration. |
long ticks | The number of ticks in the TickDuration. |
from | Единицы времени, из которых ведётся преобразование. |
to | Единицы времени, в которые ведётся преобразование. |
long value | Преобразуемое значение. |
assert(convert!("years", "months")(1) == 12); // годы, месяцы assert(convert!("months", "years")(12) == 1); // месяцы, годы assert(convert!("weeks", "days")(1) == 7); // недели, дни assert(convert!("hours", "seconds")(1) == 3600); // часы, секунды assert(convert!("seconds", "days")(1) == 0); // секунды, дни assert(convert!("seconds", "days")(86_400) == 1); // секунды, дни assert(convert!("nsecs", "nsecs")(1) == 1); // наносекунды, наносекунды assert(convert!("nsecs", "hnsecs")(1) == 0); // наносекунды, гекто-наносекунды assert(convert!("hnsecs", "nsecs")(1) == 100); // гекто-наносекунды, наносекунды assert(convert!("nsecs", "seconds")(1) == 0); // наносекунды, секунды assert(convert!("seconds", "nsecs")(1) == 1_000_000_000); // секунды, наносекунды
units | Единицы измерения времени для создания FracSec. |
long value | Количество передаваемых единиц. |
int milliseconds | Число миллисекунд |
int microseconds | Число микросекунд. |
int hnsecs | Число hnsecs. |
long nsecs | Число наносекунд. |
Переметиться к: 2
string msg | Сообщение об исключении. |
string file | Файл, в котором произошло исключение. |
size_t line | Номер строки, в которой произошло исключение. |
Throwable next | Предыдущее исключение в цепочке исключений, если оно есть. |
string msg | Сообщение об исключении. |
Throwable next | Предыдущее исключение в цепочке исключений. |
string file | Файл, в котором произошло исключение. |
size_t line | Номер строки, в которой произошло исключение. |