std.datetime.systime
- Лицензия:
- Лицензия Boost 1.0.
- Авторы:
- Jonathan M Davis
- Исходный код
- std/datetime/systime.d
- class Clock;
-
Фактически пространство имён, чтобы было ясно, что методы получают время из системных часов. Его нельзя создать.
- Примеры:
- Получение текущего времени в виде
SysTimeimport std.datetime.timezone : LocalTime; SysTime today = Clock.currTime(); assert(today.timezone is LocalTime());
- @safe SysTime currTime(ClockType clockType = ClockType.normal)(immutable TimeZone tz = LocalTime());
-
Возвращает текущее время в заданном часовом поясе.
- Параметры:
clockType core.time.ClockTypeуказывает, какие системные часы использовать для получения текущего времени. Очень немногим программам нужно использовать что-либо кроме по умолчанию.TimeZone tzЧасовой пояс для возвращаемого SysTime.
- Исключения:
-
std.datetime.date.DateTimeException, если получение времени не удалось.
- @property @trusted long currStdTime(ClockType clockType = ClockType.normal)();
-
Возвращает количество нсек с полуночи 1 января 1 г. н. э. для текущего времени.
- Параметры:
clockType core.time.ClockTypeуказывает, какие системные часы использовать для получения текущего времени. Очень немногим программам нужно использовать что-либо кроме по умолчанию.
- Исключения:
-
std.datetime.date.DateTimeException, если получение времени не удалось.
- struct SysTime;
-
SysTime— тип, используемый для получения текущего времени из системы или выполнения операций, связанных с часовыми поясами. В отличие отstd.datetime.date.DateTime, часовой пояс является неотъемлемой частьюSysTime(хотя для локального времени часовые пояса можно игнорировать, так как по умолчанию используется локальный часовой пояс). Он хранит внутреннее время в стандартном формате (нсек с полуночи 1 января 1 г. н. э. по UTC), что обеспечивает хорошее взаимодействие с системным временем. Однако это означает, что, в отличие отstd.datetime.date.DateTime, он не оптимизирован для календарных операций, и получение отдельных единиц, таких как годы или дни, потребует преобразований и будет менее эффективным.Для календарных операций, которым не важен часовой пояс, используйте
std.datetime.date.DateTime. Для системного времени используйтеSysTime.
Clock.currTimeвозвращает текущее время в видеSysTime. Чтобы преобразоватьSysTimeвstd.datetime.date.Dateилиstd.datetime.date.DateTime, просто выполните приведение типов. Чтобы преобразоватьstd.datetime.date.Dateилиstd.datetime.date.DateTimeвSysTime, используйте конструкторSysTimeи передайте желаемый часовой пояс (или не передавайтеstd.datetime.timezone.TimeZone, и будет использован локальный часовой пояс). Однако имейте в виду, что преобразование изstd.datetime.date.DateTimeвSysTimeне будет 100% точным из-за DST (один час в году не существует, а другой встречается дважды). Чтобы избежать проблем с преобразованием, храните время в видеSysTime. Кроме DST, проблем с преобразованием обычно не возникает.
Для использования часовых поясов, отличных от локального или UTC, используйтеstd.datetime.timezone.PosixTimeZoneна системах POSIX (или на Windows, если предоставляются файлы базы данных часовых поясов), иstd.datetime.timezone.WindowsTimeZoneна Windows. Время вSysTimeхранится во внутреннем виде в нсек с полуночи 1 января 1 г. н. э. по UTC. Проблемы с преобразованием не возникнут при изменении часового поясаSysTime.std.datetime.timezone.LocalTime— классstd.datetime.timezone.TimeZone, представляющий локальное время, аUTC— классstd.datetime.timezone.TimeZone, представляющий UTC.SysTimeиспользуетstd.datetime.timezone.LocalTime, если не предоставленstd.datetime.timezone.TimeZone. Дополнительную информацию о часовых поясах см. в документации поstd.datetime.timezone.TimeZone,std.datetime.timezone.PosixTimeZoneиstd.datetime.timezone.WindowsTimeZone.
Диапазон значенийSysTimeсоставляет примерно с 29000 г. до н. э. до примерно 29000 г. н. э.- Примеры:
-
import core.time : days, hours, seconds; import std.datetime.date : DateTime; import std.datetime.timezone : SimpleTimeZone, UTC; // make a specific point in time in the UTC timezone auto st = SysTime(DateTime(2018, 1, 1, 10, 30, 0), UTC()); // make a specific point in time in the New York timezone auto ny = SysTime( DateTime(2018, 1, 1, 10, 30, 0), new immutable SimpleTimeZone(-5.hours, "America/New_York") ); // ISO standard time strings writeln(st.toISOString()); // "20180101T103000Z" writeln(st.toISOExtString()); // "2018-01-01T10:30:00Z" // add two days and 30 seconds st += 2.days + 30.seconds; writeln(st.toISOExtString()); // "2018-01-03T10:30:30Z"
- nothrow @safe this(DateTime dateTime, immutable TimeZone tz = null);
-
- Параметры:
DateTime dateTimeИспользуемое значение std.datetime.date.DateTimeдля установки внутреннего std времени объектаSysTime. Посколькуstd.datetime.date.DateTimeне имеет понятия о часовом поясе, tz используется в качестве его часового пояса.TimeZone tzИспользуемый std.datetime.timezone.TimeZoneдля данного объектаSysTime. Если null, будет использованstd.datetime.timezone.LocalTime. Указанноеstd.datetime.date.DateTimeпредполагается в заданном часовом поясе.
- @safe this(DateTime dateTime, Duration fracSecs, immutable TimeZone tz = null);
-
- Параметры:
DateTime dateTimeИспользуемое значение std.datetime.date.DateTimeдля установки внутреннего std времени объектаSysTime. Посколькуstd.datetime.date.DateTimeне имеет понятия о часовом поясе, tz используется в качестве его часового пояса.Duration fracSecsДробная часть секунды времени. TimeZone tzИспользуемый std.datetime.timezone.TimeZoneдля данного объектаSysTime. Если null, будет использованstd.datetime.timezone.LocalTime. Указанноеstd.datetime.date.DateTimeпредполагается в заданном часовом поясе.
- Исключения:
-
std.datetime.date.DateTimeException, еслиfracSecsотрицательно или больше или равно одной секунде.
- nothrow @safe this(Date date, immutable TimeZone tz = null);
-
- Параметры:
Date dateИспользуемое значение std.datetime.date.Dateдля установки внутреннего std времени объектаSysTime. Посколькуstd.datetime.date.Dateне имеет понятия о часовом поясе, tz используется в качестве его часового пояса.TimeZone tzИспользуемый std.datetime.timezone.TimeZoneдля данного объектаSysTime. Если null, будет использованstd.datetime.timezone.LocalTime. Указаннаяstd.datetime.date.Dateпредполагается в заданном часовом поясе.
- pure nothrow @safe this(long stdTime, immutable TimeZone tz = null);
-
- Примечание
- В то время как другие конструкторы принимают заданную дату/время, предполагая, что она находится в заданном часовом поясе, и преобразуют ее в hnsecs в UTC с полуночи 1 января 1 г. н. э. UTC - т. е. std time - этот конструктор принимает std time, который уже находится в UTC, поэтому преобразование не происходит. Конечно, различные свойства и функции getter будут использовать функцию преобразования заданного часового пояса для преобразования результатов в этот часовой пояс, но преобразование аргументов в этот конструктор не происходит.
- Параметры:
long stdTimeКоличество hnsecs с полуночи 1 января 1 г. н. э. UTC. TimeZone tzИспользуемый std.datetime.timezone.TimeZoneдля данного объектаSysTime. Если null, будет использованstd.datetime.timezone.LocalTime.
- pure nothrow ref scope @safe SysTime opAssign()(auto ref const(SysTime) rhs) return;
-
- Параметры:
const(SysTime) rhsОбъект SysTimeдля присваивания текущему объекту.
- Возвращает:
- Ссылка на текущий объект
this.
- const pure nothrow scope @safe bool opEquals()(auto ref const(SysTime) rhs);
-
Проверяет равенство данного объекта
SysTimeи заданного объектаSysTime.Обратите внимание, что часовой пояс игнорируется. Сравниваются только внутренние значения std времени (которые находятся в UTC).
- const pure nothrow scope @safe int opCmp()(auto ref const(SysTime) rhs);
-
Сравнивает данный объект
SysTimeс заданным объектомSysTime.Часовой пояс не имеет значения при сравнении объектов
SysTime.- Возвращает:
this < rhs < 0 this == rhs 0 this > rhs > 0
- const pure nothrow @nogc scope @safe size_t toHash();
-
- Возвращает:
- Хэш-значение объекта
SysTime.
- const nothrow @property scope @safe short year();
-
Год григорианского календаря. Положительные числа - н. э., отрицательные - до н. э.
- @property scope @safe void year(int year);
-
Год григорианского календаря. Положительные числа - н. э., отрицательные - до н. э.
- Параметры:
int yearГод для установки объекту SysTime.
- Исключения:
-
std.datetime.date.DateTimeException, если новый год не високосный, и полученная дата будет 29 февраля.
- Примеры:
-
import std.datetime.date : DateTime; writeln(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).year); // 1999 writeln(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).year); // 2010 writeln(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).year); // -7
- const @property scope @safe ushort yearBC();
-
Год до н. э. григорианского календаря, считая год 0 как 1 год до н. э.
- Исключения:
-
std.datetime.date.DateTimeException, еслиisADистинно.
- Примеры:
-
import std.datetime.date : DateTime; writeln(SysTime(DateTime(0, 1, 1, 12, 30, 33)).yearBC); // 1 writeln(SysTime(DateTime(-1, 1, 1, 10, 7, 2)).yearBC); // 2 writeln(SysTime(DateTime(-100, 1, 1, 4, 59, 0)).yearBC); // 101
- @property scope @safe void yearBC(int year);
-
Год до н. э. григорианского календаря, считая год 0 как 1 год до н. э.
- Параметры:
int yearГод до н. э. для установки объекту SysTime.
- Исключения:
-
std.datetime.date.DateTimeException, если указано отрицательное значение.
- const nothrow @property scope @safe Month month();
-
Месяц григорианского года.
- Примеры:
-
import std.datetime.date : DateTime; writeln(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).month); // 7 writeln(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).month); // 10 writeln(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).month); // 4
- @property scope @safe void month(Month month);
-
Месяц григорианского года.
- Параметры:
Month monthМесяц для установки объекту SysTime.
- Исключения:
-
std.datetime.date.DateTimeException, если указанный месяц не является допустимым.
- const nothrow @property scope @safe ubyte day();
-
День григорианского месяца.
- Примеры:
-
import std.datetime.date : DateTime; writeln(SysTime(DateTime(1999, 7, 6, 9, 7, 5)).day); // 6 writeln(SysTime(DateTime(2010, 10, 4, 0, 0, 30)).day); // 4 writeln(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).day); // 5
- @property scope @safe void day(int day);
-
День григорианского месяца.
- Параметры:
int dayДень месяца для установки объекту SysTime.
- Исключения:
-
std.datetime.date.DateTimeException, если указанный день не является допустимым для текущего месяца.
- const nothrow @property scope @safe ubyte hour();
-
Часы после полуночи.
- @property scope @safe void hour(int hour);
-
Часы после полуночи.
- Параметры:
int hourЧасы для установки объекту SysTime.
- Исключения:
-
std.datetime.date.DateTimeException, если указанные часы не являются допустимыми для суток.
- const nothrow @property scope @safe ubyte minute();
-
Минуты после текущего часа.
- @property scope @safe void minute(int minute);
-
Минуты после текущего часа.
- Параметры:
int minuteМинуты для установки объекту SysTime.
- Исключения:
-
std.datetime.date.DateTimeException, если указанные минуты не являются допустимыми для часа.
- const nothrow @property scope @safe ubyte second();
-
Секунды после текущей минуты.
- @property scope @safe void second(int second);
-
Секунды после текущей минуты.
- Параметры:
int secondСекунды для установки объекту SysTime.
- Исключения:
-
std.datetime.date.DateTimeException, если указанные секунды не являются допустимыми для минуты.
- const nothrow @property scope @safe Duration fracSecs();
-
Дробная часть секунды (т.е. часть
SysTime, которая меньше одной секунды).- Примеры:
-
import core.time : msecs, usecs, hnsecs, nsecs; import std.datetime.date : DateTime; auto dt = DateTime(1982, 4, 1, 20, 59, 22); writeln(SysTime(dt, msecs(213)).fracSecs); // msecs(213) writeln(SysTime(dt, usecs(5202)).fracSecs); // usecs(5202) writeln(SysTime(dt, hnsecs(1234567)).fracSecs); // hnsecs(1234567) // SysTime and Duration both have a precision of hnsecs (100 ns), // so nsecs are going to be truncated. writeln(SysTime(dt, nsecs(123456789)).fracSecs); // nsecs(123456700)
- @property scope @safe void fracSecs(Duration fracSecs);
-
Дробная часть секунды (т.е. часть
SysTime, которая меньше одной секунды).- Параметры:
Duration fracSecsПродолжительность, на которую нужно установить дробную часть секунды этого SysTime.
- Исключения:
-
std.datetime.date.DateTimeException, если заданная продолжительность отрицательная или больше или равна одной секунде.
- Примеры:
-
import core.time : Duration, msecs, hnsecs, nsecs; import std.datetime.date : DateTime; auto st = SysTime(DateTime(1982, 4, 1, 20, 59, 22)); writeln(st.fracSecs); // Duration.zero st.fracSecs = msecs(213); writeln(st.fracSecs); // msecs(213) st.fracSecs = hnsecs(1234567); writeln(st.fracSecs); // hnsecs(1234567) // SysTime has a precision of hnsecs (100 ns), so nsecs are // going to be truncated. st.fracSecs = nsecs(123456789); writeln(st.fracSecs); // hnsecs(1234567)
- const pure nothrow @nogc @property scope @safe long stdTime();
-
Общее количество hnsecs с полуночи 1 января 1 г. н.э. по UTC. Это внутреннее представление
SysTime. - pure nothrow @property scope @safe void stdTime(long stdTime);
-
Общее количество hnsecs с полуночи 1 января 1 г. н.э. по UTC. Это внутреннее представление
SysTime.- Параметры:
long stdTimeКоличество hnsecs, прошедших с 1 января 1 г. н.э. по UTC.
- const pure nothrow @property scope @safe immutable(TimeZone) timezone();
-
Текущая временная зона этого
SysTime. Его внутреннее время всегда хранится в формате UTC, поэтому нет проблем с переходом на летнее/зимнее время. Функции, которые возвращают часть или все время (например, часы), корректируют время в соответствии с временной зоной этогоSysTimeперед возвращением. - pure nothrow @property scope @safe void timezone(immutable TimeZone timezone);
-
Текущая временная зона этого
SysTime. Его внутреннее время всегда хранится в формате UTC, поэтому нет проблем с переходом на летнее/зимнее время. Функции, которые возвращают часть или все время (например, часы), корректируют время в соответствии с временной зоной этогоSysTimeперед возвращением.- Параметры:
TimeZone timezonestd.datetime.timezone.TimeZoneдля установки временной зоны этогоSysTime.
- const nothrow @property scope @safe bool dstInEffect();
-
Возвращает значение true, если DST активен для этого
SysTime. - const nothrow @property scope @safe Duration utcOffset();
-
Возвращает разницу между временем этой
SysTimeи UTC. Включает в себя смещение DST, если оно активное. - const pure nothrow scope @safe SysTime toLocalTime();
-
Возвращает
SysTimeс тем же значением stdTime, но временной зонойstd.datetime.timezone.LocalTime. - const pure nothrow scope @safe SysTime toUTC();
-
Возвращает
SysTimeс тем же значением stdTime, но временной зоной UTC. - const pure nothrow scope @safe SysTime toOtherTZ(immutable TimeZone tz);
-
Возвращает
SysTimeс тем же значением stdTime, но заданной временной зоной. - const pure nothrow scope @safe T toUnixTime(T = time_t)()
Constraints: if (is(T == int) || is(T == long)); -
Преобразует этот
SysTimeв unix time (т.е. секунды с полуночи 1 января 1970 года по UTC).Стандарт C не определяет представление time_t, поэтому оно зависит от реализации. В системах POSIX unix time эквивалентен time_t, но это не обязательно верно в других системах (например, это неверно для Digital Mars C runtime). Поэтому будьте осторожны при использовании unix time с C-функциями на не-POSIX системах.
По умолчанию возвращаемый тип — time_t (обычно это int на 32-битных системах и long на 64-битных), но если требуется другой размер, можно передать int или long в качестве шаблонового аргумента для получения нужного размера.
Если возвращаемый тип — int, и результат не помещается в int, то используется ближайшее значение, которое можно хранить в 32 битах (т.е. ближайшее сверху, если значение превышает предел, и ближайшее снизу, если значение меньше предела). Однако попытка обработки переполнения целых чисел не производится, если возвращаемый тип — long.- Параметры:
T Возвращаемый тип (int или long). По умолчанию — time_t, который обычно составляет 32 бита на 32-битной системе и 64 бита на 64-битной.
- Возвращает:
- Целое число со знаком, представляющее unix time, эквивалентное этому SysTime.
- Примеры:
-
import core.time : hours; import std.datetime.date : DateTime; import std.datetime.timezone : SimpleTimeZone, UTC; writeln(SysTime(DateTime(1970, 1, 1), UTC()).toUnixTime()); // 0 auto pst = new immutable SimpleTimeZone(hours(-8)); writeln(SysTime(DateTime(1970, 1, 1), pst).toUnixTime()); // 28800 auto utc = SysTime(DateTime(2007, 12, 22, 8, 14, 45), UTC()); writeln(utc.toUnixTime()); // 1_198_311_285 auto ca = SysTime(DateTime(2007, 12, 22, 8, 14, 45), pst); writeln(ca.toUnixTime()); // 1_198_340_085 static void testScope(scope ref SysTime st) @safe { auto result = st.toUnixTime(); }
- static pure nothrow @safe SysTime fromUnixTime(long unixTime, immutable TimeZone tz = LocalTime());
-
Преобразует unix time (т.е. секунды с полуночи 1 января 1970 года по UTC) в
SysTime.Стандарт C не определяет представление time_t, поэтому оно зависит от реализации. В системах POSIX unix time эквивалентен time_t, но это не обязательно верно в других системах (например, это неверно для Digital Mars C runtime). Поэтому будьте осторожны при использовании unix time с C-функциями на не-POSIX системах.
- Параметры:
long unixTimeСекунды с полуночи 1 января 1970 года по UTC. TimeZone tzВременная зона для возвращаемого SysTime.
- Примеры:
-
import core.time : hours; import std.datetime.date : DateTime; import std.datetime.timezone : SimpleTimeZone, UTC; assert(SysTime.fromUnixTime(0) == SysTime(DateTime(1970, 1, 1), UTC())); auto pst = new immutable SimpleTimeZone(hours(-8)); assert(SysTime.fromUnixTime(28800) == SysTime(DateTime(1970, 1, 1), pst)); auto st1 = SysTime.fromUnixTime(1_198_311_285, UTC()); writeln(st1); // SysTime(DateTime(2007, 12, 22, 8, 14, 45), UTC()) assert(st1.timezone is UTC()); writeln(st1); // SysTime(DateTime(2007, 12, 22, 0, 14, 45), pst) auto st2 = SysTime.fromUnixTime(1_198_311_285, pst); writeln(st2); // SysTime(DateTime(2007, 12, 22, 8, 14, 45), UTC()) assert(st2.timezone is pst); writeln(st2); // SysTime(DateTime(2007, 12, 22, 0, 14, 45), pst)
- const pure nothrow scope @safe timeval toTimeVal();
-
Возвращает
timeval, который представляет этотSysTime.Обратите внимание, что, как и все преобразования в std.datetime, это усеченное преобразование.
Еслиtimeval.tv_secявляется int, и результат не помещается в int, то ближайшее значение, которое можно хранить в 32 битах, будет использовано дляtv_sec. (т.е. ближайшее сверху, если значение превышает предел, и ближайшее снизу, если значение меньше предела). - const pure nothrow scope @safe timespec toTimeSpec();
-
Возвращает
timespec, который представляет этотSysTime.Эта функция предназначена только для POSIX.
- const nothrow scope @safe tm toTM();
-
Возвращает
tm, который представляет этотSysTime. - nothrow ref scope @safe SysTime add(string units)(long value, AllowDayOverflow allowOverflow = AllowDayOverflow.yes)
Constraints: if (units == "years" || units == "months"); -
Добавляет заданное количество лет или месяцев к этому
SysTime. Отрицательное значение будет вычитаться.Обратите внимание, что если переполнение дня разрешено, и дата с измененным годом/месяцем выходит за пределы числа дней в новом месяце, то месяц будет увеличен на один, а день установлен на число дней переполнения. (например, если день был 31, а новый месяц — июнь, то месяц будет увеличен до июля, а новый день будет 1). Если переполнение дня запрещено, то день будет установлен на последнее допустимое число в месяце (например, 31 июня станет 30 июня).
- Параметры:
units Тип единиц измерения для добавления ("years" или "months"). long valueКоличество месяцев или лет, которые нужно добавить к этому SysTime.AllowDayOverflow allowOverflowРазрешить ли переполнение дней, что приводит к увеличению месяца.
- nothrow ref scope @safe SysTime roll(string units)(long value, AllowDayOverflow allowOverflow = AllowDayOverflow.yes)
Constraints: if (units == "years"); -
Добавляет заданное количество лет или месяцев к этому
SysTime. Отрицательное число вычтет.Разница между наращиванием и добавлением заключается в том, что наращивание не влияет на более крупные единицы. Наращивание
SysTimeна 12 месяцев дает точно такой жеSysTime. Однако дни все еще могут изменяться из-за разного числа дней в каждом месяце.
Поскольку нет единиц измерения, больших, чем годы, нет разницы между добавлением и наращиванием лет.- Параметры:
units Тип единиц измерения для добавления ("years" или "months"). long valueКоличество месяцев или лет, которые нужно добавить к этому SysTime.AllowDayOverflow allowOverflowРазрешить ли переполнение дней, что приводит к увеличению месяца.
- Примеры:
-
import std.datetime.date : AllowDayOverflow, DateTime; auto st1 = SysTime(DateTime(2010, 1, 1, 12, 33, 33)); st1.roll!"months"(1); writeln(st1); // SysTime(DateTime(2010, 2, 1, 12, 33, 33)) auto st2 = SysTime(DateTime(2010, 1, 1, 12, 33, 33)); st2.roll!"months"(-1); writeln(st2); // SysTime(DateTime(2010, 12, 1, 12, 33, 33)) auto st3 = SysTime(DateTime(1999, 1, 29, 12, 33, 33)); st3.roll!"months"(1); writeln(st3); // SysTime(DateTime(1999, 3, 1, 12, 33, 33)) auto st4 = SysTime(DateTime(1999, 1, 29, 12, 33, 33)); st4.roll!"months"(1, AllowDayOverflow.no); writeln(st4); // SysTime(DateTime(1999, 2, 28, 12, 33, 33)) auto st5 = SysTime(DateTime(2000, 2, 29, 12, 30, 33)); st5.roll!"years"(1); writeln(st5); // SysTime(DateTime(2001, 3, 1, 12, 30, 33)) auto st6 = SysTime(DateTime(2000, 2, 29, 12, 30, 33)); st6.roll!"years"(1, AllowDayOverflow.no); writeln(st6); // SysTime(DateTime(2001, 2, 28, 12, 30, 33))
- nothrow ref scope @safe SysTime roll(string units)(long value)
Constraints: if (units == "days");
-
-
Добавляет заданное количество единиц к этому
SysTime. Отрицательное число вычтет.Разница между сдвигом и добавлением заключается в том, что сдвиг не влияет на более крупные единицы. Например, сдвиг на один год дней дает ровно тот же
SysTime.
Допускаемые единицы:"days","minutes","hours","minutes","seconds","msecs","usecs", и"hnsecs".
Обратите внимание, что при сдвиге msecs, usecs или hnsecs все они суммируются до секунды. Таким образом, например, сдвиг на 1000 msecs точно такой же, как сдвиг на 100 000 usecs.- Параметры:
units Единицы для добавления. long valueКоличество единиц для добавления к этому SysTime.
- Примеры:
-
import core.time : msecs, hnsecs; import std.datetime.date : DateTime; auto st1 = SysTime(DateTime(2010, 1, 1, 11, 23, 12)); st1.roll!"days"(1); writeln(st1); // SysTime(DateTime(2010, 1, 2, 11, 23, 12)) st1.roll!"days"(365); writeln(st1); // SysTime(DateTime(2010, 1, 26, 11, 23, 12)) st1.roll!"days"(-32); writeln(st1); // SysTime(DateTime(2010, 1, 25, 11, 23, 12)) auto st2 = SysTime(DateTime(2010, 7, 4, 12, 0, 0)); st2.roll!"hours"(1); writeln(st2); // SysTime(DateTime(2010, 7, 4, 13, 0, 0)) auto st3 = SysTime(DateTime(2010, 2, 12, 12, 0, 0)); st3.roll!"hours"(-1); writeln(st3); // SysTime(DateTime(2010, 2, 12, 11, 0, 0)) auto st4 = SysTime(DateTime(2009, 12, 31, 0, 0, 0)); st4.roll!"minutes"(1); writeln(st4); // SysTime(DateTime(2009, 12, 31, 0, 1, 0)) auto st5 = SysTime(DateTime(2010, 1, 1, 0, 0, 0)); st5.roll!"minutes"(-1); writeln(st5); // SysTime(DateTime(2010, 1, 1, 0, 59, 0)) auto st6 = SysTime(DateTime(2009, 12, 31, 0, 0, 0)); st6.roll!"seconds"(1); writeln(st6); // SysTime(DateTime(2009, 12, 31, 0, 0, 1)) auto st7 = SysTime(DateTime(2010, 1, 1, 0, 0, 0)); st7.roll!"seconds"(-1); writeln(st7); // SysTime(DateTime(2010, 1, 1, 0, 0, 59)) auto dt = DateTime(2010, 1, 1, 0, 0, 0); auto st8 = SysTime(dt); st8.roll!"msecs"(1); writeln(st8); // SysTime(dt, msecs(1)) auto st9 = SysTime(dt); st9.roll!"msecs"(-1); writeln(st9); // SysTime(dt, msecs(999)) auto st10 = SysTime(dt); st10.roll!"hnsecs"(1); writeln(st10); // SysTime(dt, hnsecs(1)) auto st11 = SysTime(dt); st11.roll!"hnsecs"(-1); writeln(st11); // SysTime(dt, hnsecs(9_999_999))
- const pure nothrow scope @safe SysTime opBinary(string op)(Duration duration)
Constraints: if (op == "+" || op == "-"); -
Возвращает результат сложения или вычитания
core.time.Durationиз этогоSysTime.Допустимые типы арифметических операций для
SysTimeс использованием этого оператора:
SysTime + Duration --> SysTime SysTime - Duration --> SysTime - Параметры:
Duration durationcore.time.Durationдля добавления или вычитания из этогоSysTime.
- Примеры:
-
import core.time : hours, seconds; import std.datetime.date : DateTime; assert(SysTime(DateTime(2015, 12, 31, 23, 59, 59)) + seconds(1) == SysTime(DateTime(2016, 1, 1, 0, 0, 0))); assert(SysTime(DateTime(2015, 12, 31, 23, 59, 59)) + hours(1) == SysTime(DateTime(2016, 1, 1, 0, 59, 59))); assert(SysTime(DateTime(2016, 1, 1, 0, 0, 0)) - seconds(1) == SysTime(DateTime(2015, 12, 31, 23, 59, 59))); assert(SysTime(DateTime(2016, 1, 1, 0, 59, 59)) - hours(1) == SysTime(DateTime(2015, 12, 31, 23, 59, 59)));
- pure nothrow ref scope @safe SysTime opOpAssign(string op)(Duration duration)
Constraints: if (op == "+" || op == "-"); -
Возвращает результат сложения или вычитания
core.time.Durationиз этогоSysTime, а также присваивает результат этомуSysTime.Допустимые типы арифметических операций для
SysTimeс использованием этого оператора:
SysTime + Duration --> SysTime SysTime - Duration --> SysTime - Параметры:
Duration durationcore.time.Durationдля добавления или вычитания из этогоSysTime.
- const pure nothrow scope @safe Duration opBinary(string op)(SysTime rhs)
Constraints: if (op == "-"); -
Возвращает разницу между двумя
SysTimes.Допустимые типы арифметических операций для
SysTimeс использованием этого оператора:
SysTime - SysTime --> duration - const nothrow scope @safe int diffMonths(scope SysTime rhs);
-
Возвращает разницу между двумя
SysTimes в месяцах.Чтобы получить разницу в годах, вычтите свойство year двух
SysTimes. Чтобы получить разницу в днях или неделях, вычтите самиSysTimes и используйте полученнуюcore.time.Duration. Поскольку преобразование между месяцами и более мелкими единицами требует определенной даты (которой уcore.time.Durationнет), для получения разницы в месяцах требуется некоторая математика, использующая как свойство year, так и свойство month, поэтому эта функция является удобной для получения разницы в месяцах.
Обратите внимание, что количество дней в месяцах или насколько глубоко в месяц входит любая дата не имеет значения. Это разница в свойстве month в сочетании с разницей в годах * 12. Например, 31 декабря и 1 января различаются на один месяц, так же как 1 декабря и 31 января различаются на один месяц.- Параметры:
SysTime rhsSysTimeдля вычитания из текущей.
- Примеры:
-
import core.time; import std.datetime.date : Date; assert(SysTime(Date(1999, 2, 1)).diffMonths( SysTime(Date(1999, 1, 31))) == 1); assert(SysTime(Date(1999, 1, 31)).diffMonths( SysTime(Date(1999, 2, 1))) == -1); assert(SysTime(Date(1999, 3, 1)).diffMonths( SysTime(Date(1999, 1, 1))) == 2); assert(SysTime(Date(1999, 1, 1)).diffMonths( SysTime(Date(1999, 3, 31))) == -2);
- const nothrow @property scope @safe bool isLeapYear();
-
Является ли этот
SysTimeвисокосным годом. - const nothrow @property scope @safe DayOfWeek dayOfWeek();
-
День недели, на который приходится этот
SysTime. - const nothrow @property scope @safe ushort dayOfYear();
-
День года, на который приходится этот
SysTime.- Примеры:
-
import core.time; import std.datetime.date : DateTime; writeln(SysTime(DateTime(1999, 1, 1, 12, 22, 7)).dayOfYear); // 1 writeln(SysTime(DateTime(1999, 12, 31, 7, 2, 59)).dayOfYear); // 365 writeln(SysTime(DateTime(2000, 12, 31, 21, 20, 0)).dayOfYear); // 366
- @property scope @safe void dayOfYear(int day);
-
День года.
- Параметры:
int dayДень года, который нужно установить, чтобы этот SysTimeсоответствовал этому дню года.
- const nothrow @property scope @safe int dayOfGregorianCal();
-
Номер дня в григорианском календаре, на который приходится этот
SysTime.- Примеры:
-
import core.time; import std.datetime.date : DateTime; writeln(SysTime(DateTime(1, 1, 1, 0, 0, 0)).dayOfGregorianCal); // 1 writeln(SysTime(DateTime(1, 12, 31, 23, 59, 59)).dayOfGregorianCal); // 365 writeln(SysTime(DateTime(2, 1, 1, 2, 2, 2)).dayOfGregorianCal); // 366 writeln(SysTime(DateTime(0, 12, 31, 7, 7, 7)).dayOfGregorianCal); // 0 writeln(SysTime(DateTime(0, 1, 1, 19, 30, 0)).dayOfGregorianCal); // -365 writeln(SysTime(DateTime(-1, 12, 31, 4, 7, 0)).dayOfGregorianCal); // -366 writeln(SysTime(DateTime(2000, 1, 1, 9, 30, 20)).dayOfGregorianCal); // 730_120 writeln(SysTime(DateTime(2010, 12, 31, 15, 45, 50)).dayOfGregorianCal); // 734_137
- nothrow @property scope @safe void dayOfGregorianCal(int days);
-
Номер дня в григорианском календаре, на который приходится этот
SysTime. Установка этого свойства не влияет на временную частьSysTime.- Параметры:
int daysДень григорианского календаря, который нужно установить для этого SysTime.
- Примеры:
-
import core.time; import std.datetime.date : DateTime; auto st = SysTime(DateTime(0, 1, 1, 12, 0, 0)); st.dayOfGregorianCal = 1; writeln(st); // SysTime(DateTime(1, 1, 1, 12, 0, 0)) st.dayOfGregorianCal = 365; writeln(st); // SysTime(DateTime(1, 12, 31, 12, 0, 0)) st.dayOfGregorianCal = 366; writeln(st); // SysTime(DateTime(2, 1, 1, 12, 0, 0)) st.dayOfGregorianCal = 0; writeln(st); // SysTime(DateTime(0, 12, 31, 12, 0, 0)) st.dayOfGregorianCal = -365; writeln(st); // SysTime(DateTime(-0, 1, 1, 12, 0, 0)) st.dayOfGregorianCal = -366; writeln(st); // SysTime(DateTime(-1, 12, 31, 12, 0, 0)) st.dayOfGregorianCal = 730_120; writeln(st); // SysTime(DateTime(2000, 1, 1, 12, 0, 0)) st.dayOfGregorianCal = 734_137; writeln(st); // SysTime(DateTime(2010, 12, 31, 12, 0, 0))
- const nothrow @property scope @safe ubyte isoWeek();
-
Неделя ISO 8601 года, в которой находится этот
SysTime.- См. также:
- Дата ISO Week.
- Примеры:
-
import core.time; import std.datetime.date : Date; auto st = SysTime(Date(1999, 7, 6)); const cst = SysTime(Date(2010, 5, 1)); immutable ist = SysTime(Date(2015, 10, 10)); writeln(st.isoWeek); // 27 writeln(cst.isoWeek); // 17 writeln(ist.isoWeek); // 41
- const nothrow @property scope @safe SysTime endOfMonth();
-
SysTimeдля последнего дня месяца, в котором находится эта дата. Временная часть endOfMonth всегда равна 23:59:59.9999999.- Примеры:
-
import core.time : msecs, usecs, hnsecs; import std.datetime.date : DateTime; assert(SysTime(DateTime(1999, 1, 6, 0, 0, 0)).endOfMonth == SysTime(DateTime(1999, 1, 31, 23, 59, 59), hnsecs(9_999_999))); assert(SysTime(DateTime(1999, 2, 7, 19, 30, 0), msecs(24)).endOfMonth == SysTime(DateTime(1999, 2, 28, 23, 59, 59), hnsecs(9_999_999))); assert(SysTime(DateTime(2000, 2, 7, 5, 12, 27), usecs(5203)).endOfMonth == SysTime(DateTime(2000, 2, 29, 23, 59, 59), hnsecs(9_999_999))); assert(SysTime(DateTime(2000, 6, 4, 12, 22, 9), hnsecs(12345)).endOfMonth == SysTime(DateTime(2000, 6, 30, 23, 59, 59), hnsecs(9_999_999)));
- const nothrow @property scope @safe ubyte daysInMonth();
-
Последний день месяца, в котором находится этот
SysTime.- Примеры:
-
import core.time; import std.datetime.date : DateTime; writeln(SysTime(DateTime(1999, 1, 6, 0, 0, 0)).daysInMonth); // 31 writeln(SysTime(DateTime(1999, 2, 7, 19, 30, 0)).daysInMonth); // 28 writeln(SysTime(DateTime(2000, 2, 7, 5, 12, 27)).daysInMonth); // 29 writeln(SysTime(DateTime(2000, 6, 4, 12, 22, 9)).daysInMonth); // 30
- const nothrow @property scope @safe bool isAD();
-
Является ли текущий год датой н.э.
- Примеры:
-
import core.time; import std.datetime.date : DateTime; assert(SysTime(DateTime(1, 1, 1, 12, 7, 0)).isAD); assert(SysTime(DateTime(2010, 12, 31, 0, 0, 0)).isAD); assert(!SysTime(DateTime(0, 12, 31, 23, 59, 59)).isAD); assert(!SysTime(DateTime(-2010, 1, 1, 2, 2, 2)).isAD);
- const nothrow @property scope @safe long julianDay();
-
Джолианский день для этого
SysTimeв указанное время. Например, до полудня 1996-03-31 будет джолианским днем № 2 450 173, поэтому эта функция возвращает 2 450 173, а с полудня и далее джолианский день будет № 2 450 174, поэтому эта функция возвращает 2 450 174. - const nothrow @property scope @safe long modJulianDay();
-
Модифицированный джолианский день для любой даты в этот день (поскольку модифицированный джолианский день меняется в полночь).
- const nothrow scope @safe Date opCast(T)()
Constraints: if (is(immutable(T) == immutable(Date))); -
Возвращает эквивалентную
std.datetime.date.Dateдля этогоSysTime. - const nothrow scope @safe DateTime opCast(T)()
Constraints: if (is(immutable(T) == immutable(DateTime))); -
Возвращает эквивалентную
std.datetime.date.DateTimeдля этогоSysTime. - const nothrow scope @safe TimeOfDay opCast(T)()
Constraints: if (is(immutable(T) == immutable(TimeOfDay))); -
Возвращает эквивалентную
std.datetime.date.TimeOfDayдля этогоSysTime. - const nothrow scope @safe string toISOString();
const scope void toISOString(W)(ref W writer)
Constraints: if (isOutputRange!(W, char));
-
-
Преобразует этот
SysTimeв строку с форматом YYYYMMDDTHHMMSS.FFFFFFFTZ (где F — дробная часть секунды, а TZ — часовой пояс).Обратите внимание, что количество цифр в дробной части секунды зависит от количества дробных секунд. Максимальное количество — 7 (что соответствует наносекундам), но используется только необходимое количество цифр для правильного значения (без последующих нулей), а если дробная часть отсутствует, то десятичная точка также отсутствует.
Если у этогоSysTimeчасовой пояс равенstd.datetime.timezone.LocalTime, то TZ пусто. Если его часовой пояс равенUTC, то TZ равно "Z". В противном случае это смещение от UTC (например, +0100 или -0700). Обратите внимание, что смещение от UTC недостаточно для однозначной идентификации часового пояса.
Смещения часовых поясов будут в формате +HHMM или -HHMM.
Предупреждение: Раньше toISOString выполнял то же, что иtoISOExtString, и генерировал +HH:MM или -HH:MM для часового пояса, если он не былstd.datetime.timezone.LocalTimeилиstd.datetime.timezone.UTC, что не соответствует ISO 8601 для формата строки без расширения. Это исправлено. Однако пока функция fromISOString будет продолжать принимать расширенный формат для часового пояса, чтобы любой код, который записывал результат toISOString для последующего чтения, продолжал работать. Текущее поведение сохранится до июля 2019 года, после чего функция fromISOString будет исправлена в соответствии со стандартом.- Параметры:
W writerОбъект, принимающий диапазон вывода
- Возвращает:
- Строку, если не используется диапазон вывода;
voidв противном случае.
- Примеры:
-
import core.time : msecs, hnsecs; import std.datetime.date : DateTime; assert(SysTime(DateTime(2010, 7, 4, 7, 6, 12)).toISOString() == "20100704T070612"); assert(SysTime(DateTime(1998, 12, 25, 2, 15, 0), msecs(24)).toISOString() == "19981225T021500.024"); assert(SysTime(DateTime(0, 1, 5, 23, 9, 59)).toISOString() == "00000105T230959"); assert(SysTime(DateTime(-4, 1, 5, 0, 0, 2), hnsecs(520_920)).toISOString() == "-00040105T000002.052092");
- const nothrow scope @safe string toISOExtString();
const scope void toISOExtString(W)(ref W writer)
Constraints: if (isOutputRange!(W, char)); -
Преобразует этот
SysTimeв строку с форматом YYYY-MM-DDTHH:MM:SS.FFFFFFFTZ (где F — дробная часть секунды, а TZ — часовой пояс).Обратите внимание, что количество цифр в дробной части секунды зависит от количества дробных секунд. Максимальное количество — 7 (что соответствует наносекундам), но используется только необходимое количество цифр для правильного значения (без последующих нулей), а если дробная часть отсутствует, то десятичная точка также отсутствует.
Если у этогоSysTimeчасовой пояс равенstd.datetime.timezone.LocalTime, то TZ пусто. Если его часовой пояс равенUTC, то TZ равно "Z". В противном случае это смещение от UTC (например, +01:00 или -07:00). Обратите внимание, что смещение от UTC недостаточно для однозначной идентификации часового пояса.
Смещения часовых поясов будут в формате +HH:MM или -HH:MM.- Параметры:
W writerОбъект, принимающий диапазон вывода
- Возвращает:
- Строку, если не используется диапазон вывода;
voidв противном случае.
- Примеры:
-
import core.time : msecs, hnsecs; import std.datetime.date : DateTime; assert(SysTime(DateTime(2010, 7, 4, 7, 6, 12)).toISOExtString() == "2010-07-04T07:06:12"); assert(SysTime(DateTime(1998, 12, 25, 2, 15, 0), msecs(24)).toISOExtString() == "1998-12-25T02:15:00.024"); assert(SysTime(DateTime(0, 1, 5, 23, 9, 59)).toISOExtString() == "0000-01-05T23:09:59"); assert(SysTime(DateTime(-4, 1, 5, 0, 0, 2), hnsecs(520_920)).toISOExtString() == "-0004-01-05T00:00:02.052092");
- const nothrow scope @safe string toSimpleString();
const scope void toSimpleString(W)(ref W writer)
Constraints: if (isOutputRange!(W, char)); -
Преобразует этот
SysTimeв строку с форматом YYYY-Mon-DD HH:MM:SS.FFFFFFFTZ (где F — дробная часть секунды, а TZ — часовой пояс).Обратите внимание, что количество цифр в дробной части секунды зависит от количества дробных секунд. Максимальное количество — 7 (что соответствует наносекундам), но используется только необходимое количество цифр для правильного значения (без последующих нулей), а если дробная часть отсутствует, то десятичная точка также отсутствует.
Если у этогоSysTimeчасовой пояс равенstd.datetime.timezone.LocalTime, то TZ пусто. Если его часовой пояс равенUTC, то TZ равно "Z". В противном случае это смещение от UTC (например, +01:00 или -07:00). Обратите внимание, что смещение от UTC недостаточно для однозначной идентификации часового пояса.
Смещения часовых поясов будут в формате +HH:MM или -HH:MM.- Параметры:
W writerОбъект, принимающий диапазон вывода
- Возвращает:
- Строку, если не используется диапазон вывода;
voidв противном случае.
- Примеры:
-
import core.time : msecs, hnsecs; import std.datetime.date : DateTime; assert(SysTime(DateTime(2010, 7, 4, 7, 6, 12)).toSimpleString() == "2010-Jul-04 07:06:12"); assert(SysTime(DateTime(1998, 12, 25, 2, 15, 0), msecs(24)).toSimpleString() == "1998-Dec-25 02:15:00.024"); assert(SysTime(DateTime(0, 1, 5, 23, 9, 59)).toSimpleString() == "0000-Jan-05 23:09:59"); assert(SysTime(DateTime(-4, 1, 5, 0, 0, 2), hnsecs(520_920)).toSimpleString() == "-0004-Jan-05 00:00:02.052092");
- const nothrow scope @safe string toString();
const scope void toString(W)(ref W writer)
Constraints: if (isOutputRange!(W, char)); -
Преобразует этот
SysTimeв строку.Эта функция предназначена для простого преобразования
SysTimeв строку для кода, которому не важен точный формат — лишь то, что информация представлена ясно. Она также упрощает преобразованиеSysTimeв строку при использовании функций, таких какto!string,format, илиwriteln, которые используют toString для преобразования типов, определённых пользователем. Поэтому маловероятно, что код будет вызывать toString напрямую.
Формат строки намеренно не задаётся, и код, которому важен формат строки, должен использоватьtoISOString,toISOExtString,toSimpleString, или другую пользовательскую функцию форматирования, которая явно генерирует необходимый формат. Причина в том, что код тогда ясно указывает используемый формат, что делает код менее подверженным ошибкам при обслуживании и взаимодействии с другими программами, которые используют сгенерированные строки. По этой же причине уSysTimeнет функцииfromString, но естьfromISOString,fromISOExtString, иfromSimpleString.
Формат, возвращаемый функцией toString, может измениться в будущем.- Параметры:
W writerОбъект, принимающий диапазон вывода
- Возвращает:
- Строку, если не используется диапазон вывода;
voidв противном случае.
- @safe SysTime fromISOString(S)(scope const S isoString, immutable TimeZone tz = null)
Constraints: if (isSomeString!S); -
Создаёт
SysTimeиз строки с форматом YYYYMMDDTHHMMSS.FFFFFFFTZ (где F — дробная часть секунды, TZ — часовой пояс). Пробелы удаляются из переданной строки.Точный формат точно такой же, как описано в
toISOString, за исключением того, что разрешается наличие конечных нулей — включая дробные секунды со всеми нулями. Однако десятичная точка без последующих цифр недопустима. Кроме того, хотяtoISOStringникогда не сгенерирует строку с более чем 7 цифрами в дробной части секунды (потому что это предел с точностью до наносекунд), она позволит большее количество цифр для чтения строк из других источников с большей точностью (однако любые цифры после 7 будут усечены).
Если в строке нет часового пояса, то используетсяstd.datetime.timezone.LocalTime. Если часовой пояс равен "Z", то используетсяUTC. В противном случае используетсяstd.datetime.timezone.SimpleTimeZone, соответствующий заданному смещению от UTC. Для того, чтобы возвращаемыйSysTimeбыл в определённом часовом поясе, передайте этот часовой пояс, иSysTimeбудет преобразован в этот часовой пояс (хотя он всё равно будет считан в том часовом поясе, который указан в строке).
Принимаемые форматы смещений часовых поясов: +HH, -HH, +HHMM и -HHMM.
Предупреждение: РаньшеtoISOStringвыполнял то же, что иtoISOExtString, и генерировал +HH:MM или -HH:MM для часового пояса, если он не былstd.datetime.timezone.LocalTimeилиstd.datetime.timezone.UTC, что не соответствует ISO 8601 для формата строки без расширения. Это исправлено. Однако пока функция fromISOString будет продолжать принимать расширенный формат для часового пояса, чтобы любой код, который записывал результат toISOString для последующего чтения, продолжал работать. Текущее поведение сохранится до июля 2019 года, после чего функция fromISOString будет исправлена в соответствии со стандартом.- Параметры:
S isoStringСтрока в формате ISO для дат и времени. TimeZone tzЧасовой пояс для преобразования заданного времени (преобразование не происходит, если равно null).
- Исключения:
-
std.datetime.date.DateTimeException, если заданная строка не соответствует формату ISO или полученныйSysTimeне является допустимым.
- @safe SysTime fromISOExtString(S)(scope const S isoExtString, immutable TimeZone tz = null)
Constraints: if (isSomeString!S);
-
-
Создаёт
SysTimeиз строки в формате YYYY-MM-DDTHH:MM:SS.FFFFFFFTZ (где F — дробные секунды, TZ — часовой пояс). Пробелы из заданной строки удаляются.Точный формат соответствует описанию в
toISOExtStringза исключением того, что разрешены конечные нули — в том числе для дробных секунд со всеми нулями. Однако десятичная точка без последующих цифр является недопустимой. Кроме того, в то время какtoISOExtStringникогда не сгенерирует строку с более чем 7 цифрами в дробных секундах (потому что это предел с точностью до сотых долей наносекунд), она позволит больше 7 цифр для чтения строк из других источников с большей точностью (однако любые цифры сверх 7 будут усечены).
Если в строке нет часового пояса, используетсяstd.datetime.timezone.LocalTime. Если часовой пояс — "Z", то используетсяUTC. В противном случае используетсяstd.datetime.timezone.SimpleTimeZone, соответствующий заданному смещению от UTC. Чтобы вернутьSysTimeв определённом часовом поясе, передайте этот часовой пояс, и возвращаемоеSysTimeбудет преобразовано в этот часовой пояс (хотя оно по-прежнему будет считаться в соответствии с часовым поясом в строке).
Допустимые форматы смещений часового пояса — +HH, -HH, +HH:MM и -HH:MM.- Параметры:
S isoExtStringСтрока, отформатированная в расширенном ISO-формате для дат и времени. TimeZone tzЧасовой пояс для преобразования заданного времени (преобразование не происходит, если значение равно null).
- Исключения:
-
std.datetime.date.DateTimeException, если заданная строка не соответствует ISO-формату или полученноеSysTimeне будет действительным.
- @safe SysTime fromSimpleString(S)(scope const S simpleString, immutable TimeZone tz = null)
Constraints: if (isSomeString!S); -
Создаёт
SysTimeиз строки в формате YYYY-MM-DD HH:MM:SS.FFFFFFFTZ (где F — дробные секунды, TZ — часовой пояс). Пробелы из заданной строки удаляются.Точный формат соответствует описанию в
toSimpleStringза исключением того, что разрешены конечные нули — в том числе для дробных секунд со всеми нулями. Однако десятичная точка без последующих цифр является недопустимой. Кроме того, в то время какtoSimpleStringникогда не сгенерирует строку с более чем 7 цифрами в дробных секундах (потому что это предел с точностью до сотых долей наносекунд), она позволит больше 7 цифр для чтения строк из других источников с большей точностью (однако любые цифры сверх 7 будут усечены).
Если в строке нет часового пояса, используетсяstd.datetime.timezone.LocalTime. Если часовой пояс — "Z", то используетсяUTC. В противном случае используетсяstd.datetime.timezone.SimpleTimeZone, соответствующий заданному смещению от UTC. Чтобы вернутьSysTimeв определённом часовом поясе, передайте этот часовой пояс, и возвращаемоеSysTimeбудет преобразовано в этот часовой пояс (хотя оно по-прежнему будет считаться в соответствии с часовым поясом в строке).
Допустимые форматы смещений часового пояса — +HH, -HH, +HH:MM и -HH:MM.- Параметры:
S simpleStringСтрока, отформатированная в формате, в котором toSimpleStringформатирует даты и время.TimeZone tzЧасовой пояс для преобразования заданного времени (преобразование не происходит, если значение равно null).
- Исключения:
-
std.datetime.date.DateTimeException, если заданная строка не соответствует ISO-формату или полученноеSysTimeне будет действительным.
- static pure nothrow @property @safe SysTime min();
-
Возвращает
SysTime, наиболее удалённый в прошлом, представимыйSysTime.SysTime, возвращаемое значение, находится в UTC. - static pure nothrow @property @safe SysTime max();
-
Возвращает
SysTime, наиболее удалённый в будущем, представимыйSysTime.SysTime, возвращаемое значение, находится в UTC.
-
- pure nothrow @nogc @safe long unixTimeToStdTime(long unixTime);
-
Преобразует время по Unix (использующее полночь 1 января 1970 года по UTC и секунды как единицы измерения) в «стандартное время» (использующее полночь 1 января 1 года по UTC и нсек как единицы измерения).
Стандарт C не определяет представление time_t, поэтому оно зависит от реализации. В системах POSIX время по Unix эквивалентно time_t, но это не обязательно верно в других системах (например, это неверно для среды выполнения Digital Mars C). Поэтому будьте осторожны при использовании времени по Unix с функциями C в не-POSIX системах.
Эпоха «стандартного времени» основана на пролептическом григорианском календаре согласно ISO 8601 и используетсяSysTimeво внутренней работе. Однако представление времени как целого числа в нсек с указанной эпохой технически не является частью стандарта, хотя и основано на нём. Поэтому название «стандартное время» не идеально, но нет официального названия. C# использует «ticks» для того же, но это не фактические тики часов, и термин «ticks» используется для фактических тиков часов вcore.time.MonoTime, поэтому использование термина «ticks» здесь нелогично. Таким образом, для лучшего или худшего, std.datetime использует термин «стандартное время» для этого.- Параметры:
long unixTimeВремя по Unix для преобразования.
- См. также:
- SysTime.fromUnixTime
- Примеры:
-
import std.datetime.date : DateTime; import std.datetime.timezone : UTC; // Midnight, January 1st, 1970 writeln(unixTimeToStdTime(0)); // 621_355_968_000_000_000L assert(SysTime(unixTimeToStdTime(0)) == SysTime(DateTime(1970, 1, 1), UTC())); writeln(unixTimeToStdTime(int.max)); // 642_830_804_470_000_000L assert(SysTime(unixTimeToStdTime(int.max)) == SysTime(DateTime(2038, 1, 19, 3, 14, 07), UTC())); writeln(unixTimeToStdTime(-127_127)); // 621_354_696_730_000_000L assert(SysTime(unixTimeToStdTime(-127_127)) == SysTime(DateTime(1969, 12, 30, 12, 41, 13), UTC()));
- pure nothrow @safe T stdTimeToUnixTime(T = time_t)(long stdTime)
Constraints: if (is(T == int) || is(T == long)); -
Преобразует «стандартное время» (использующее полночь 1 января 1 года по UTC и нсек как единицы измерения) в время по Unix (использующее полночь 1 января 1970 года по UTC и секунды как единицы измерения).
Стандарт C не определяет представление time_t, поэтому оно зависит от реализации. В системах POSIX время по Unix эквивалентно time_t, но это не обязательно верно в других системах (например, это неверно для среды выполнения Digital Mars C). Поэтому будьте осторожны при использовании времени по Unix с функциями C в не-POSIX системах.
Эпоха «стандартного времени» основана на пролептическом григорианском календаре согласно ISO 8601 и используетсяSysTimeво внутренней работе. Однако представление времени как целого числа в нсек с указанной эпохой технически не является частью стандарта, хотя и основано на нём. Поэтому название «стандартное время» не идеально, но нет официального названия. C# использует «ticks» для того же, но это не фактические тики часов, и термин «ticks» используется для фактических тиков часов вcore.time.MonoTime, поэтому использование термина «ticks» здесь нелогично. Таким образом, для лучшего или худшего, std.datetime использует термин «стандартное время» для этого.
По умолчанию, тип возвращаемого значения — time_t (который обычно является псевдонимом для int в 32-битных системах и long в 64-битных системах), но если требуется другой размер, можно передать int или long в качестве шаблона аргумента, чтобы получить необходимый размер.
Если тип возвращаемого значения — int, и результат не помещается в int, используется ближайшее значение, которое может быть представлено в 32 битах (то естьint.maxесли значение превышает предел, иint.minесли значение меньше). Однако попытки избежать переполнения целых чисел при возвращаемом значении long не предпринимаются.- Параметры:
T Тип возвращаемого значения (int или long). По умолчанию — time_t, который обычно имеет 32 бита в 32-битной системе и 64 бита в 64-битной системе. long stdTime«Стандартное время» для преобразования.
- Возвращаемое значение:
- Целое число со знаком, представляющее время по Unix, эквивалентное заданному «стандартному времени».
- См. также:
- SysTime.toUnixTime
- Примеры:
-
// Midnight, January 1st, 1970 UTC writeln(stdTimeToUnixTime(621_355_968_000_000_000L)); // 0 // 2038-01-19 03:14:07 UTC writeln(stdTimeToUnixTime(642_830_804_470_000_000L)); // int.max
- @safe SysTime SYSTEMTIMEToSysTime(scope const SYSTEMTIME* st, immutable TimeZone tz = LocalTime());
-
Эта функция поддерживается только Windows.
Преобразует структуру
SYSTEMTIMEвSysTime.- Параметры:
SYSTEMTIME* stСтруктура SYSTEMTIMEдля преобразования.TimeZone tzЧасовой пояс, в котором предполагается находится время в структуре SYSTEMTIME(еслиSYSTEMTIMEбыла получена с помощью системного вызова Windows,SYSTEMTIMEбудет находиться либо в местном времени, либо в UTC, в зависимости от вызова).
- Исключения:
-
std.datetime.date.DateTimeException, если заданноеSYSTEMTIMEне поместится вSysTime, что маловероятно, учитывая, чтоSysTime.maxнаходится в 29228 году нашей эры, а максимальноеSYSTEMTIMEнаходится в 30827 году нашей эры.
- @safe SYSTEMTIME SysTimeToSYSTEMTIME(scope SysTime sysTime);
-
Эта функция работает только в Windows.
Преобразует
SysTimeв структуруSYSTEMTIME.
Возвращаемая структураSYSTEMTIMEбудет установлена с использованием часового пояса заданногоSysTime, поэтому, чтобы получитьSYSTEMTIMEв формате UTC, установите часовой поясSysTimeв UTC.- Параметры:
SysTime sysTimeПреобразуемый SysTime.
- Исключения:
-
std.datetime.date.DateTimeException, если заданныйSysTimeне помещается вSYSTEMTIME. Это произойдёт только если датаSysTimeпредшествует 1601 году.
- @safe long FILETIMEToStdTime(scope const FILETIME* ft);
-
Эта функция работает только в Windows.
Преобразует структуру
FILETIMEв количество hnsecs, прошедших с полуночи 1 января 1 года н. э.- Параметры:
FILETIME* ftПреобразуемая структура FILETIME.
- Исключения:
-
std.datetime.date.DateTimeException, если заданную структуруFILETIMEнельзя представить в качестве возвращаемого значения.
- @safe SysTime FILETIMEToSysTime(scope const FILETIME* ft, immutable TimeZone tz = LocalTime());
-
Эта функция работает только в Windows.
Преобразует структуру
FILETIMEвSysTime.- Параметры:
FILETIME* ftПреобразуемая структура FILETIME.TimeZone tzЧасовой пояс, в котором будет SysTime(FILETIME— в UTC).
- Исключения:
-
std.datetime.date.DateTimeException, если заданная структураFILETIMEне помещается вSysTime.
- @safe FILETIME stdTimeToFILETIME(long stdTime);
-
Эта функция работает только в Windows.
Преобразует количество hnsecs, прошедших с полуночи 1 января 1 года н. э., в структуру
FILETIME.- Параметры:
long stdTimeКоличество hnsecs, прошедших с полуночи 1 января 1 года н. э. (UTC).
- Исключения:
-
std.datetime.date.DateTimeException, если заданное значение не помещается вFILETIME.
- @safe FILETIME SysTimeToFILETIME(scope SysTime sysTime);
-
Эта функция работает только в Windows.
Преобразует
SysTimeв структуруFILETIME.
ЗначенияSysTimeвсегда в формате UTC.- Параметры:
SysTime sysTimeПреобразуемый SysTime.
- Исключения:
-
std.datetime.date.DateTimeException, если заданныйSysTimeне помещается вFILETIME.
- alias DosFileTime = uint;
-
Тип, представляющий формат даты и времени файла DOS.
- @safe SysTime DosFileTimeToSysTime(DosFileTime dft, immutable TimeZone tz = LocalTime());
-
Преобразует формат даты/времени файла DOS в
SysTime.- Параметры:
DosFileTime dftПреобразуемое время файла DOS. TimeZone tzЧасовой пояс, в котором предполагается находиться время файла DOS.
- Исключения:
-
std.datetime.date.DateTimeException, если времяDosFileTimeнекорректно.
- Примеры:
-
import std.datetime.date : DateTime; // SysTime(DateTime(1980, 1, 1, 0, 0, 0)) writeln(DosFileTimeToSysTime(0b00000000001000010000000000000000)); // SysTime(DateTime(2107, 12, 31, 23, 59, 58)) writeln(DosFileTimeToSysTime(0b11111111100111111011111101111101)); writeln(DosFileTimeToSysTime(0x3E3F8456)); // SysTime(DateTime(2011, 1, 31, 16, 34, 44))
- @safe DosFileTime SysTimeToDosFileTime(scope SysTime sysTime);
-
Преобразует
SysTimeв формат даты/времени файла DOS.- Параметры:
SysTime sysTimeПреобразуемый SysTime.
- Исключения:
-
std.datetime.date.DateTimeException, если заданныйSysTimeне может быть преобразован вDosFileTime.
- Примеры:
-
import std.datetime.date : DateTime; // 0b00000000001000010000000000000000 writeln(SysTimeToDosFileTime(SysTime(DateTime(1980, 1, 1, 0, 0, 0)))); // 0b11111111100111111011111101111101 writeln(SysTimeToDosFileTime(SysTime(DateTime(2107, 12, 31, 23, 59, 58)))); writeln(SysTimeToDosFileTime(SysTime(DateTime(2011, 1, 31, 16, 34, 44)))); // 0x3E3F8456
- @safe SysTime parseRFC822DateTime()(scope const char[] value);
SysTime parseRFC822DateTime(R)(scope R value)
Constraints: if (isRandomAccessRange!R && hasSlicing!R && hasLength!R && (is(immutable(ElementType!R) == immutable(char)) || is(immutable(ElementType!R) == immutable(ubyte)))); -
Ожидается, что заданный массив
charили произвольный доступный диапазонcharилиubyteнаходится в формате, указанном в RFC 5322 раздел 3.3 с грамматическим правилом date-time. Это формат даты и времени, обычно используемый в интернет-сообщениях, таких как электронная почта и HTTP. Будет возвращён соответствующийSysTime.RFC 822 был исходной спецификацией (отсюда и название функции), а RFC 5322 — текущая.
День недели игнорируется, кроме проверки на корректность, поскольку день недели можно определить из даты. Не проверяется, соответствует ли указанный день недели фактическому дню недели заданной даты (хотя технически это некорректно по спецификации, если день недели не соответствует фактическому дню недели заданной даты).
Если часовой пояс является"-0000"(или считается эквивалентным"-0000"согласно разделу 4.3 спецификации), используетсяstd.datetime.timezone.SimpleTimeZoneс смещением UTC0вместоstd.datetime.timezone.UTC, в то время как"+0000"используетstd.datetime.timezone.UTC.
Обратите внимание, что, посколькуSysTimeв настоящее время не поддерживает значение секунд 60 (как иногда делается для високосных секунд), если значение даты и времени имеет значение 60 для секунд, оно обрабатывается как 59.
Единственный момент, в котором эта функция нарушает RFC 5322, заключается в том, что она принимает"\n"в пробелах при сгибе вместо"\r\n", потому что спецификация HTTP этого требует.- Исключения:
-
std.datetime.date.DateTimeException, если заданная строка не соответствует грамматике поля даты и времени или полученныйSysTimeнекорректен.
- Примеры:
-
import core.time : hours; import std.datetime.date : DateTime, DateTimeException; import std.datetime.timezone : SimpleTimeZone, UTC; import std.exception : assertThrown; auto tz = new immutable SimpleTimeZone(hours(-8)); assert(parseRFC822DateTime("Sat, 6 Jan 1990 12:14:19 -0800") == SysTime(DateTime(1990, 1, 6, 12, 14, 19), tz)); assert(parseRFC822DateTime("9 Jul 2002 13:11 +0000") == SysTime(DateTime(2002, 7, 9, 13, 11, 0), UTC())); auto badStr = "29 Feb 2001 12:17:16 +0200"; assertThrown!DateTimeException(parseRFC822DateTime(badStr));
© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_datetime_systime.html