Spec-Zone.ru › D

std.datetime.systime

Категория Функции
Типы Clock SysTime DosFileTime
Преобразование parseRFC822DateTime DosFileTimeToSysTime FILETIMEToStdTime FILETIMEToSysTime stdTimeToFILETIME stdTimeToUnixTime SYSTEMTIMEToSysTime SysTimeToDosFileTime SysTimeToFILETIME SysTimeToSYSTEMTIME unixTimeToStdTime

Лицензия:
Лицензия Boost 1.0.
Авторы:
Jonathan M Davis
Исходный код
std/datetime/systime.d
class Clock;

Фактически пространство имён, чтобы было ясно, что методы получают время из системных часов. Его нельзя создать.

Примеры:
Получение текущего времени в виде SysTime
import 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 timezone std.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 duration core.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 duration core.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 rhs SysTime для вычитания из текущей.
Примеры:
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 с смещением UTC 0 вместо 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API