Spec-Zone.ru › D

std.datetime.date

Категория Функции
Основные типы дат Date DateTime
Другие типы дат Month DayOfWeek TimeOfDay
Проверка дат valid validTimeUnits yearIsLeapYear isTimePoint enforceValid
Преобразование дат daysToDayOfWeek monthsToMonth
Единицы времени cmpTimeUnits timeStrings
Другие AllowDayOverflow DateTimeException

Лицензия:
Boost License 1.0.
Авторы:
Jonathan M Davis
Источник
std/datetime/date.d
alias DateTimeException = core.time.TimeException;

Тип исключения, используемый в std.datetime. Это псевдоним для core.time.TimeException. Оба типа можно перехватывать без учета того, из какого модуля они произошли.

enum Month: ubyte;

Представляет 12 месяцев григорианского календаря (январь — 1).

Примеры:
writeln(Date(2018, 10, 1).month); // Month.oct
writeln(DateTime(1, 1, 1).month); // Month.jan
jan
feb
mar
apr
may
jun
jul
aug
sep
oct
nov
dec
enum DayOfWeek: ubyte;

Представляет 7 дней григорианской недели (воскресенье — 0).

Примеры:
writeln(Date(2018, 10, 1).dayOfWeek); // DayOfWeek.mon
writeln(DateTime(5, 5, 5).dayOfWeek); // DayOfWeek.thu
sun
mon
tue
wed
thu
fri
sat
alias AllowDayOverflow = std.typecons.Flag!"allowDayOverflow".Flag;

При некоторых расчётах с датами добавление месяцев или лет может привести к тому, что дата окажется недействительной (например, 29 февраля 2001 года или 31 июня 2000 года). Если переполнение разрешено (по умолчанию), месяц будет соответственно увеличен (например, 29 февраля 2001 года станет 1 марта 2001 года, а 31 июня 2000 года — 1 июля 2000 года). Если переполнение запрещено, день будет скорректирован на последнее действительное число в этом месяце (например, 29 февраля 2001 года станет 28 февраля 2001 года, а 31 июня 2000 года — 30 июня 2000 года).

AllowDayOverflow применяется только к расчётам, включающим месяцы или годы.

Если установлено значение AllowDayOverflow.no, переполнение дня запрещено.

В противном случае, если установлено значение AllowDayOverflow.yes, переполнение дня разрешено.

immutable string[] timeStrings;

Массив строк, представляющих единицы времени, начиная с наименьшей и заканчивая наибольшей. Не включает "nsecs".

Включает "hnsecs" (гекто-наносекунды (100 нс)), "usecs" (микросекунды), "msecs" (миллисекунды), "seconds", "minutes", "hours", "days", "weeks", "months", и "years"

struct DateTime;

Объединяет структуры std.datetime.date.Date и std.datetime.date.TimeOfDay, создавая объект, содержащий как дату, так и время. Он оптимизирован для операций с календарём и не имеет понятия о часовом поясе. Для объекта, оптимизированного для операций со временем, основанных на системном времени, используйте std.datetime.systime.SysTime. std.datetime.systime.SysTime имеет понятие о часовом поясе и обладает значительно большей точностью (hnsecs). DateTime предназначен в первую очередь для календарных операций, а не для точных измерений времени.

Примеры:
import core.time : days, seconds;

auto dt = DateTime(2000, 6, 1, 10, 30, 0);

writeln(dt.date); // Date(2000, 6, 1)
writeln(dt.timeOfDay); // TimeOfDay(10, 30, 0)
writeln(dt.dayOfYear); // 153
writeln(dt.dayOfWeek); // DayOfWeek.thu

dt += 10.days + 100.seconds;
writeln(dt); // DateTime(2000, 6, 11, 10, 31, 40)

writeln(dt.toISOExtString()); // "2000-06-11T10:31:40"
writeln(dt.toISOString()); // "20000611T103140"
writeln(dt.toSimpleString()); // "2000-Jun-11 10:31:40"

writeln(DateTime.fromISOExtString("2018-01-01T12:00:00")); // DateTime(2018, 1, 1, 12, 0, 0)
writeln(DateTime.fromISOString("20180101T120000")); // DateTime(2018, 1, 1, 12, 0, 0)
writeln(DateTime.fromSimpleString("2018-Jan-01 12:00:00")); // DateTime(2018, 1, 1, 12, 0, 0)
pure nothrow @nogc @safe this(Date date, TimeOfDay tod = TimeOfDay.init);
Параметры:
Date date Дата в объекте DateTime.
TimeOfDay tod Время в объекте DateTime.
pure @safe this(int year, int month, int day, int hour = 0, int minute = 0, int second = 0);
Параметры:
int year Год.
int month Месяц (январь — 1).
int day День.
int hour Час;
int minute Минута;
int second Секунда;
const pure nothrow @nogc @safe int opCmp(DateTime rhs);

Сравнивает данный объект DateTime с заданным объектом DateTime..

Возвращаемое значение:
this < rhs < 0
this == rhs 0
this > rhs > 0
const pure nothrow @nogc @property @safe Date date();

Дата в объекте DateTime.

pure nothrow @nogc @property @safe void date(Date date);

Дата в объекте DateTime.

Параметры:
Date date Дата, которая должна быть установлена для объекта DateTime.
const pure nothrow @nogc @property @safe TimeOfDay timeOfDay();

Время в объекте DateTime.

pure nothrow @nogc @property @safe void timeOfDay(TimeOfDay tod);

Время в объекте DateTime.

Параметры:
TimeOfDay tod std.datetime.date.TimeOfDay для установки времени в объекте DateTime.
const pure nothrow @nogc @property @safe short year();

Год григорианского календаря. Положительные числа — н.э., отрицательные — до н.э.

pure @property @safe void year(int year);

Год григорианского календаря. Положительные числа — н.э., отрицательные — до н.э.

Параметры:
int year Год, который необходимо установить для объекта DateTime.
Исключения:
std.datetime.date.DateTimeException, если новый год не високосный и полученная дата совпадает с 29 февраля.
Примеры:
writeln(DateTime(Date(1999, 7, 6), TimeOfDay(9, 7, 5)).year); // 1999
writeln(DateTime(Date(2010, 10, 4), TimeOfDay(0, 0, 30)).year); // 2010
writeln(DateTime(Date(-7, 4, 5), TimeOfDay(7, 45, 2)).year); // -7
const pure @property @safe short yearBC();

Год до н.э. григорианского календаря, где год 0 считается 1 годом до н.э.

Исключения:
std.datetime.date.DateTimeException, если isAD равно true.
Примеры:
writeln(DateTime(Date(0, 1, 1), TimeOfDay(12, 30, 33)).yearBC); // 1
writeln(DateTime(Date(-1, 1, 1), TimeOfDay(10, 7, 2)).yearBC); // 2
writeln(DateTime(Date(-100, 1, 1), TimeOfDay(4, 59, 0)).yearBC); // 101
pure @property @safe void yearBC(int year);

Год до н.э. григорианского календаря, где год 0 считается 1 годом до н.э.

Параметры:
int year Год до н.э., который необходимо установить для объекта DateTime.
Исключения:
std.datetime.date.DateTimeException, если задано отрицательное значение.
Примеры:
auto dt = DateTime(Date(2010, 1, 1), TimeOfDay(7, 30, 0));
dt.yearBC = 1;
writeln(dt); // DateTime(Date(0, 1, 1), TimeOfDay(7, 30, 0))

dt.yearBC = 10;
writeln(dt); // DateTime(Date(-9, 1, 1), TimeOfDay(7, 30, 0))
const pure nothrow @nogc @property @safe Month month();

Месяц григорианского года.

Примеры:
writeln(DateTime(Date(1999, 7, 6), TimeOfDay(9, 7, 5)).month); // 7
writeln(DateTime(Date(2010, 10, 4), TimeOfDay(0, 0, 30)).month); // 10
writeln(DateTime(Date(-7, 4, 5), TimeOfDay(7, 45, 2)).month); // 4
pure @property @safe void month(Month month);

Месяц григорианского года.

Параметры:
Month month Месяц, который необходимо установить для объекта DateTime.
Исключения:
std.datetime.date.DateTimeException, если заданный месяц не является допустимым.
const pure nothrow @nogc @property @safe ubyte day();

День григорианского месяца.

Примеры:
writeln(DateTime(Date(1999, 7, 6), TimeOfDay(9, 7, 5)).day); // 6
writeln(DateTime(Date(2010, 10, 4), TimeOfDay(0, 0, 30)).day); // 4
writeln(DateTime(Date(-7, 4, 5), TimeOfDay(7, 45, 2)).day); // 5
pure @property @safe void day(int day);

День григорианского месяца.

Параметры:
int day День месяца, который необходимо установить для объекта DateTime.
Исключения:
std.datetime.date.DateTimeException, если заданный день не является допустимым для текущего месяца.
const pure nothrow @nogc @property @safe ubyte hour();

Часы после полуночи.

pure @property @safe void hour(int hour);

Часы после полуночи.

Параметры:
int hour Часы, которые необходимо установить для объекта DateTime.
Исключения:
std.datetime.date.DateTimeException, если заданные часы приведут к недопустимому значению для объекта DateTime.
const pure nothrow @nogc @property @safe ubyte minute();

Минуты после часа.

pure @property @safe void minute(int minute);

Минуты после часа.

Параметры:
int minute Минуты, которые необходимо установить для объекта DateTime.
Исключения:
std.datetime.date.DateTimeException, если заданные минуты приведут к недопустимому значению для объекта DateTime.
const pure nothrow @nogc @property @safe ubyte second();

Секунды после минуты.

pure @property @safe void second(int second);

Секунды после минуты.

Параметры:
int second Секунды, которые необходимо установить для объекта DateTime.
Исключения:
std.datetime.date.DateTimeException, если заданные секунды приведут к недопустимому значению для объекта DateTime.
pure nothrow @nogc ref @safe DateTime add(string units)(long value, AllowDayOverflow allowOverflow = AllowDayOverflow.yes)
Constraints: if (units == "years" || units == "months");

Добавляет заданное количество лет или месяцев к этому объекту DateTime, изменяя его. Отрицательное число будет вычитаться.

Обратите внимание, что если переполнение по дням разрешено, и дата с изменённым годом/месяцем превышает количество дней в новом месяце, то месяц будет увеличен на один, а день установлен на количество дней, превышающих лимит. (например, если день был 31, а новый месяц — июнь, то месяц будет изменён на июль, а новый день будет 1). Если переполнение по дням запрещено, то день будет установлен на последнее допустимое значение в месяце (например, 31 июня станет 30 июня).

Параметры:
units Тип единиц для добавления ("years" или "months").
long value Количество месяцев или лет, которые необходимо добавить к объекту DateTime.
AllowDayOverflow allowOverflow Разрешить ли переполнение по дням, вызывая увеличение месяца.
Возвращаемое значение:
Ссылка на объект DateTime (this).
Примеры:
auto dt1 = DateTime(2010, 1, 1, 12, 30, 33);
dt1.add!"months"(11);
writeln(dt1); // DateTime(2010, 12, 1, 12, 30, 33)

auto dt2 = DateTime(2010, 1, 1, 12, 30, 33);
dt2.add!"months"(-11);
writeln(dt2); // DateTime(2009, 2, 1, 12, 30, 33)

auto dt3 = DateTime(2000, 2, 29, 12, 30, 33);
dt3.add!"years"(1);
writeln(dt3); // DateTime(2001, 3, 1, 12, 30, 33)

auto dt4 = DateTime(2000, 2, 29, 12, 30, 33);
dt4.add!"years"(1, AllowDayOverflow.no);
writeln(dt4); // DateTime(2001, 2, 28, 12, 30, 33)
pure nothrow @nogc ref @safe DateTime roll(string units)(long value, AllowDayOverflow allowOverflow = AllowDayOverflow.yes)
Constraints: if (units == "years" || units == "months");

Добавляет заданное количество лет или месяцев к этому DateTime, изменяя его. Отрицательное число будет вычитаться.

Разница между добавлением и «прокруткой» (rolling) заключается в том, что при «прокрутке» не затрагиваются более крупные единицы. «Прокрутка» DateTime на 12 месяцев даёт ровно тот же DateTime. Однако дни все равно могут меняться из-за разного количества дней в каждом месяце.

Поскольку нет единиц, больших чем годы, нет разницы между добавлением и «прокруткой» лет.

Параметры:
units Тип единиц для добавления ("years" или "months").
long value Количество месяцев или лет для добавления к этому DateTime.
AllowDayOverflow allowOverflow Допускать ли переполнение дней, вызывающее увеличение месяца.
Возвращает:
Ссылка на DateTime (this).
Примеры:
auto dt1 = DateTime(2010, 1, 1, 12, 33, 33);
dt1.roll!"months"(1);
writeln(dt1); // DateTime(2010, 2, 1, 12, 33, 33)

auto dt2 = DateTime(2010, 1, 1, 12, 33, 33);
dt2.roll!"months"(-1);
writeln(dt2); // DateTime(2010, 12, 1, 12, 33, 33)

auto dt3 = DateTime(1999, 1, 29, 12, 33, 33);
dt3.roll!"months"(1);
writeln(dt3); // DateTime(1999, 3, 1, 12, 33, 33)

auto dt4 = DateTime(1999, 1, 29, 12, 33, 33);
dt4.roll!"months"(1, AllowDayOverflow.no);
writeln(dt4); // DateTime(1999, 2, 28, 12, 33, 33)

auto dt5 = DateTime(2000, 2, 29, 12, 30, 33);
dt5.roll!"years"(1);
writeln(dt5); // DateTime(2001, 3, 1, 12, 30, 33)

auto dt6 = DateTime(2000, 2, 29, 12, 30, 33);
dt6.roll!"years"(1, AllowDayOverflow.no);
writeln(dt6); // DateTime(2001, 2, 28, 12, 30, 33)
pure nothrow @nogc ref @safe DateTime roll(string units)(long value)
Constraints: if (units == "days");

pure nothrow @nogc ref @safe DateTime roll(string units)(long value)
Constraints: if (units == "hours" || units == "minutes" || units == "seconds");

Добавляет заданное количество единиц к этому DateTime, изменяя его. Отрицательное число будет вычитаться.

Разница между добавлением и «прокруткой» (rolling) заключается в том, что при «прокрутке» не затрагиваются более крупные единицы. Например, «прокрутка» DateTime на количество дней, соответствующее одному году, даёт ровно тот же DateTime.

Допустимые единицы — "days", "minutes", "hours", "minutes", и "seconds".

Параметры:
units Единицы для добавления.
long value Количество units для добавления к этому DateTime.
Возвращает:
Ссылка на DateTime (this).
Примеры:
auto dt1 = DateTime(2010, 1, 1, 11, 23, 12);
dt1.roll!"days"(1);
writeln(dt1); // DateTime(2010, 1, 2, 11, 23, 12)
dt1.roll!"days"(365);
writeln(dt1); // DateTime(2010, 1, 26, 11, 23, 12)
dt1.roll!"days"(-32);
writeln(dt1); // DateTime(2010, 1, 25, 11, 23, 12)

auto dt2 = DateTime(2010, 7, 4, 12, 0, 0);
dt2.roll!"hours"(1);
writeln(dt2); // DateTime(2010, 7, 4, 13, 0, 0)

auto dt3 = DateTime(2010, 1, 1, 0, 0, 0);
dt3.roll!"seconds"(-1);
writeln(dt3); // DateTime(2010, 1, 1, 0, 0, 59)
const pure nothrow @nogc @safe DateTime opBinary(string op)(Duration duration)
Constraints: if (op == "+" || op == "-");

Результат сложения или вычитания core.time.Duration из этого DateTime.

Допустимые типы арифметических операций для DateTime с использованием этого оператора:

DateTime + Duration --> DateTime
DateTime - Duration --> DateTime

Параметры:
Duration duration core.time.Duration для сложения или вычитания из этого DateTime.
Примеры:
import core.time : hours, seconds;

assert(DateTime(2015, 12, 31, 23, 59, 59) + seconds(1) ==
       DateTime(2016, 1, 1, 0, 0, 0));

assert(DateTime(2015, 12, 31, 23, 59, 59) + hours(1) ==
       DateTime(2016, 1, 1, 0, 59, 59));

assert(DateTime(2016, 1, 1, 0, 0, 0) - seconds(1) ==
       DateTime(2015, 12, 31, 23, 59, 59));

assert(DateTime(2016, 1, 1, 0, 59, 59) - hours(1) ==
       DateTime(2015, 12, 31, 23, 59, 59));
pure nothrow @nogc ref @safe DateTime opOpAssign(string op)(Duration duration)
Constraints: if (op == "+" || op == "-");

Результат сложения или вычитания продолжительности из этого DateTime, а также присвоение результата этому DateTime.

Допустимые типы арифметических операций для DateTime с использованием этого оператора:

DateTime + duration --> DateTime
DateTime - duration --> DateTime

Параметры:
Duration duration Продолжительность для сложения или вычитания из этого DateTime.
const pure nothrow @nogc @safe Duration opBinary(string op)(DateTime rhs)
Constraints: if (op == "-");

Разница между двумя DateTime.

Допустимые типы арифметических операций для DateTime с использованием этого оператора:

DateTime - DateTime --> duration

const pure nothrow @nogc @safe int diffMonths(DateTime rhs);

Возвращает разницу между двумя DateTime в месяцах.

Чтобы получить разницу в годах, вычтите свойство года двух DateTime. Чтобы получить разницу в днях или неделях, вычтите сами DateTime и используйте полученную core.time.Duration. Поскольку преобразование между месяцами и более мелкими единицами требует конкретной даты (у которых нет core.time.Duration), вычисление разницы в месяцах требует некоторых математических действий, используя как свойство года, так и месяца, поэтому эта функция — удобный способ вычисления разницы в месяцах.

Обратите внимание, что количество дней в месяцах или до какой даты в месяце попадают обе даты не имеет значения. Это разница в свойстве месяца в сочетании с разницей в годах * 12. Например, 31 декабря и 1 января различаются на один месяц, так же как 1 декабря и 31 января.

Параметры:
DateTime rhs DateTime для вычитания из этой.
Примеры:
assert(DateTime(1999, 2, 1, 12, 2, 3).diffMonths(
           DateTime(1999, 1, 31, 23, 59, 59)) == 1);

assert(DateTime(1999, 1, 31, 0, 0, 0).diffMonths(
           DateTime(1999, 2, 1, 12, 3, 42)) == -1);

assert(DateTime(1999, 3, 1, 5, 30, 0).diffMonths(
           DateTime(1999, 1, 1, 2, 4, 7)) == 2);

assert(DateTime(1999, 1, 1, 7, 2, 4).diffMonths(
           DateTime(1999, 3, 31, 0, 30, 58)) == -2);
const pure nothrow @nogc @property @safe bool isLeapYear();

Является ли текущий год високосным.

const pure nothrow @nogc @property @safe DayOfWeek dayOfWeek();

День недели, на который приходится эта DateTime.

const pure nothrow @nogc @property @safe ushort dayOfYear();

Номер дня в году этой DateTime.

Примеры:
writeln(DateTime(Date(1999, 1, 1), TimeOfDay(12, 22, 7)).dayOfYear); // 1
writeln(DateTime(Date(1999, 12, 31), TimeOfDay(7, 2, 59)).dayOfYear); // 365
writeln(DateTime(Date(2000, 12, 31), TimeOfDay(21, 20, 0)).dayOfYear); // 366
pure @property @safe void dayOfYear(int day);

Номер дня в году.

Параметры:
int day День в году, который нужно установить для этого DateTime.
const pure nothrow @nogc @property @safe int dayOfGregorianCal();

Номер дня в григорианском календаре, соответствующий этой DateTime.

Примеры:
writeln(DateTime(Date(1, 1, 1), TimeOfDay(0, 0, 0)).dayOfGregorianCal); // 1
writeln(DateTime(Date(1, 12, 31), TimeOfDay(23, 59, 59)).dayOfGregorianCal); // 365
writeln(DateTime(Date(2, 1, 1), TimeOfDay(2, 2, 2)).dayOfGregorianCal); // 366

writeln(DateTime(Date(0, 12, 31), TimeOfDay(7, 7, 7)).dayOfGregorianCal); // 0
writeln(DateTime(Date(0, 1, 1), TimeOfDay(19, 30, 0)).dayOfGregorianCal); // -365
writeln(DateTime(Date(-1, 12, 31), TimeOfDay(4, 7, 0)).dayOfGregorianCal); // -366

writeln(DateTime(Date(2000, 1, 1), TimeOfDay(9, 30, 20)).dayOfGregorianCal); // 730_120
writeln(DateTime(Date(2010, 12, 31), TimeOfDay(15, 45, 50)).dayOfGregorianCal); // 734_137
pure nothrow @nogc @property @safe void dayOfGregorianCal(int days);

Номер дня в григорианском календаре, соответствующий этой DateTime. Установка этого свойства не влияет на временную часть DateTime.

Параметры:
int days День в григорианском календаре, который нужно установить для этого DateTime.
Примеры:
auto dt = DateTime(Date.init, TimeOfDay(12, 0, 0));
dt.dayOfGregorianCal = 1;
writeln(dt); // DateTime(Date(1, 1, 1), TimeOfDay(12, 0, 0))

dt.dayOfGregorianCal = 365;
writeln(dt); // DateTime(Date(1, 12, 31), TimeOfDay(12, 0, 0))

dt.dayOfGregorianCal = 366;
writeln(dt); // DateTime(Date(2, 1, 1), TimeOfDay(12, 0, 0))

dt.dayOfGregorianCal = 0;
writeln(dt); // DateTime(Date(0, 12, 31), TimeOfDay(12, 0, 0))

dt.dayOfGregorianCal = -365;
writeln(dt); // DateTime(Date(-0, 1, 1), TimeOfDay(12, 0, 0))

dt.dayOfGregorianCal = -366;
writeln(dt); // DateTime(Date(-1, 12, 31), TimeOfDay(12, 0, 0))

dt.dayOfGregorianCal = 730_120;
writeln(dt); // DateTime(Date(2000, 1, 1), TimeOfDay(12, 0, 0))

dt.dayOfGregorianCal = 734_137;
writeln(dt); // DateTime(Date(2010, 12, 31), TimeOfDay(12, 0, 0))
const pure nothrow @property @safe ubyte isoWeek();

Номер недели в ISO 8601, соответствующий этой DateTime.

См. также:
ISO Week Date
const pure nothrow @property @safe short isoWeekYear();

Год в календаре ISO 8601, соответствующий этой DateTime.

См. также:
ISO Week Date
const pure nothrow @property @safe DateTime endOfMonth();

DateTime для последнего дня месяца, в котором находится эта DateTime. Временная часть endOfMonth всегда равна 23:59:59.

Примеры:
assert(DateTime(Date(1999, 1, 6), TimeOfDay(0, 0, 0)).endOfMonth ==
       DateTime(Date(1999, 1, 31), TimeOfDay(23, 59, 59)));

assert(DateTime(Date(1999, 2, 7), TimeOfDay(19, 30, 0)).endOfMonth ==
       DateTime(Date(1999, 2, 28), TimeOfDay(23, 59, 59)));

assert(DateTime(Date(2000, 2, 7), TimeOfDay(5, 12, 27)).endOfMonth ==
       DateTime(Date(2000, 2, 29), TimeOfDay(23, 59, 59)));

assert(DateTime(Date(2000, 6, 4), TimeOfDay(12, 22, 9)).endOfMonth ==
       DateTime(Date(2000, 6, 30), TimeOfDay(23, 59, 59)));
const pure nothrow @nogc @property @safe ubyte daysInMonth();

Последний день месяца, в котором находится эта DateTime.

Примеры:
writeln(DateTime(Date(1999, 1, 6), TimeOfDay(0, 0, 0)).daysInMonth); // 31
writeln(DateTime(Date(1999, 2, 7), TimeOfDay(19, 30, 0)).daysInMonth); // 28
writeln(DateTime(Date(2000, 2, 7), TimeOfDay(5, 12, 27)).daysInMonth); // 29
writeln(DateTime(Date(2000, 6, 4), TimeOfDay(12, 22, 9)).daysInMonth); // 30
const pure nothrow @nogc @property @safe bool isAD();

Является ли текущий год датой н.э.

Примеры:
assert(DateTime(Date(1, 1, 1), TimeOfDay(12, 7, 0)).isAD);
assert(DateTime(Date(2010, 12, 31), TimeOfDay(0, 0, 0)).isAD);
assert(!DateTime(Date(0, 12, 31), TimeOfDay(23, 59, 59)).isAD);
assert(!DateTime(Date(-2010, 1, 1), TimeOfDay(2, 2, 2)).isAD);
const pure nothrow @nogc @property @safe long julianDay();

Число юлианского дня для этой DateTime в заданное время. Например, до полудня 1996-03-31 соответствует номеру юлианского дня 2_450_173, поэтому эта функция возвращает 2_450_173, а с полудня и далее — 2_450_174, поэтому функция возвращает 2_450_174.

const pure nothrow @nogc @property @safe long modJulianDay();

Изменённое число юлианского дня для любой даты (так как изменённое число юлианского дня меняется в полночь).

const pure nothrow @safe string toISOString();

const void toISOString(W)(ref W writer)
Constraints: if (isOutputRange!(W, char));

Преобразует этот DateTime в строку с форматом YYYYMMDDTHHMMSS. Если writer задано, результирующая строка будет записана непосредственно в него.

Параметры:
W writer Объект char, принимающий диапазон вывода
Возвращает:
Строку string при отсутствии диапазона вывода; void в противном случае.
Примеры:
assert(DateTime(Date(2010, 7, 4), TimeOfDay(7, 6, 12)).toISOString() ==
       "20100704T070612");

assert(DateTime(Date(1998, 12, 25), TimeOfDay(2, 15, 0)).toISOString() ==
       "19981225T021500");

assert(DateTime(Date(0, 1, 5), TimeOfDay(23, 9, 59)).toISOString() ==
       "00000105T230959");

assert(DateTime(Date(-4, 1, 5), TimeOfDay(0, 0, 2)).toISOString() ==
       "-00040105T000002");
const pure nothrow @safe string toISOExtString();

const void toISOExtString(W)(ref W writer)
Constraints: if (isOutputRange!(W, char));

Преобразует этот DateTime в строку с форматом YYYY-MM-DDTHH:MM:SS. Если writer задано, результирующая строка будет записана непосредственно в него.

Параметры:
W writer Объект char, принимающий диапазон вывода
Возвращает:
Строку string при отсутствии диапазона вывода; void в противном случае.
Примеры:
assert(DateTime(Date(2010, 7, 4), TimeOfDay(7, 6, 12)).toISOExtString() ==
       "2010-07-04T07:06:12");

assert(DateTime(Date(1998, 12, 25), TimeOfDay(2, 15, 0)).toISOExtString() ==
       "1998-12-25T02:15:00");

assert(DateTime(Date(0, 1, 5), TimeOfDay(23, 9, 59)).toISOExtString() ==
       "0000-01-05T23:09:59");

assert(DateTime(Date(-4, 1, 5), TimeOfDay(0, 0, 2)).toISOExtString() ==
       "-0004-01-05T00:00:02");
const pure nothrow @safe string toSimpleString();

const void toSimpleString(W)(ref W writer)
Constraints: if (isOutputRange!(W, char));

Преобразует этот DateTime в строку с форматом YYYY-Mon-DD HH:MM:SS. Если writer задано, результирующая строка будет записана непосредственно в него.

Параметры:
W writer Объект char, принимающий диапазон вывода
Возвращает:
Строку string при отсутствии диапазона вывода; void в противном случае.
Примеры:
assert(DateTime(Date(2010, 7, 4), TimeOfDay(7, 6, 12)).toSimpleString() ==
       "2010-Jul-04 07:06:12");

assert(DateTime(Date(1998, 12, 25), TimeOfDay(2, 15, 0)).toSimpleString() ==
       "1998-Dec-25 02:15:00");

assert(DateTime(Date(0, 1, 5), TimeOfDay(23, 9, 59)).toSimpleString() ==
       "0000-Jan-05 23:09:59");

assert(DateTime(Date(-4, 1, 5), TimeOfDay(0, 0, 2)).toSimpleString() ==
       "-0004-Jan-05 00:00:02");
const pure nothrow @safe string toString();

const void toString(W)(ref W writer)
Constraints: if (isOutputRange!(W, char));

Преобразует этот DateTime в строку.

Эта функция предназначена для простого преобразования DateTime в строку для кода, которому не важен точный формат — важно только ясное представление информации. Она также упрощает преобразование DateTime в строку при использовании функций, таких как to!string, format, или writeln, которые используют toString для преобразования типов, определённых пользователем. Поэтому маловероятно, что код будет напрямую вызывать toString.

Формат строки намеренно не определён, и код, которому важен формат строки, должен использовать toISOString, toISOExtString, toSimpleString, или какую-либо другую пользовательскую функцию форматирования, которая явно генерирует необходимый формат. Причина в том, что код тогда чётко указывает используемый формат, что уменьшает вероятность ошибок при сопровождении кода и взаимодействии с другими программами, которые потребляют сгенерированные строки. По этой же причине у DateTime нет функции fromString, в то время как есть fromISOString, fromISOExtString, и fromSimpleString.

Формат, возвращаемый toString, может измениться в будущем.

pure @safe DateTime fromISOString(S)(scope const S isoString)
Constraints: if (isSomeString!S);

Создаёт DateTime из строки с форматом YYYYMMDDTHHMMSS. Пробелы из заданной строки удаляются.

Параметры:
S isoString Строка, отформатированная в формате ISO для дат и времени.
Исключения:
std.datetime.date.DateTimeException, если заданная строка не соответствует формату ISO или результирующая DateTime не будет допустимой.
pure @safe DateTime fromISOExtString(S)(scope const S isoExtString)
Constraints: if (isSomeString!S);

Создаёт DateTime из строки с форматом YYYY-MM-DDTHH:MM:SS. Пробелы из заданной строки удаляются.

Параметры:
S isoExtString Строка, отформатированная в расширенном формате ISO для дат и времени.
Исключения:
std.datetime.date.DateTimeException, если заданная строка не соответствует расширенному формату ISO или результирующая DateTime не будет допустимой.
pure @safe DateTime fromSimpleString(S)(scope const S simpleString)
Constraints: if (isSomeString!S);

Создаёт DateTime из строки с форматом YYYY-Mon-DD HH:MM:SS. Пробелы из заданной строки удаляются.

Параметры:
S simpleString Строка, отформатированная так же, как toSimpleString форматирует даты и время.
Исключения:
std.datetime.date.DateTimeException, если заданная строка не соответствует формату или результирующая DateTime не будет допустимой.
static pure nothrow @nogc @property @safe DateTime min();

Возвращает DateTime , наиболее удалённую в прошлом, которую может представить DateTime.

static pure nothrow @nogc @property @safe DateTime max();

Возвращает DateTime , наиболее удалённую в будущем, которую может представить DateTime.

struct Date;

Представляет дату в пролептическом григорианском календаре, начиная с 32 768 г. до н. э. и до 32 767 г. н. э. Положительные годы соответствуют н. э. Отрицательные годы соответствуют до н. э.

Год, месяц и день хранятся отдельно в памяти, для оптимизации операций, основанных на календаре.

Date использует пролептический григорианский календарь, поэтому предполагает вычисления високосных лет по григорианскому календарю на протяжении всего периода. Согласно ISO 8601, год 1 до н. э. соответствует году 0, т. е. 1 до н. э. — 0, 2 до н. э. — -1 и т. д. Используйте yearBC, чтобы использовать до н. э. как положительное целое число, при этом 1 до н. э. будет годом, предшествующим 1 н. э.

Год 0 является високосным годом.

Примеры:
import core.time : days;

auto d = Date(2000, 6, 1);

writeln(d.dayOfYear); // 153
writeln(d.dayOfWeek); // DayOfWeek.thu

d += 10.days;
writeln(d); // Date(2000, 6, 11)

writeln(d.toISOExtString()); // "2000-06-11"
writeln(d.toISOString()); // "20000611"
writeln(d.toSimpleString()); // "2000-Jun-11"

writeln(Date.fromISOExtString("2018-01-01")); // Date(2018, 1, 1)
writeln(Date.fromISOString("20180101")); // Date(2018, 1, 1)
writeln(Date.fromSimpleString("2018-Jan-01")); // Date(2018, 1, 1)
pure @safe this(int year, int month, int day);
Исключения:
std.datetime.date.DateTimeException, если полученное значение Date не является корректным.
Параметры:
int year Год григорианского календаря. Положительные значения — н.э., неположительные — до н.э., причём 0 год — год, предшествующий 1 н.э.
int month Месяц года (январь — 1).
int day День месяца.
pure nothrow @nogc @safe this(int day);
Параметры:
int day X-й день григорианского календаря, для которого будет создано Date.
const pure nothrow @nogc @safe int opCmp(Date rhs);

Сравнивает текущее Date с заданным Date.

Возвращаемое значение:
this < rhs < 0
this == rhs 0
this > rhs > 0
const pure nothrow @nogc @property @safe short year();

Год григорианского календаря. Положительные значения — н.э., неположительные — до н.э.

Примеры:
writeln(Date(1999, 7, 6).year); // 1999
writeln(Date(2010, 10, 4).year); // 2010
writeln(Date(-7, 4, 5).year); // -7
pure @property @safe void year(int year);

Год григорианского календаря. Положительные значения — н.э., неположительные — до н.э.

Параметры:
int year Год, который нужно установить для даты.
Исключения:
std.datetime.date.DateTimeException если новый год не високосный, и результат даты окажется 29 февраля.
Примеры:
writeln(Date(1999, 7, 6).year); // 1999
writeln(Date(2010, 10, 4).year); // 2010
writeln(Date(-7, 4, 5).year); // -7
const pure @property @safe ushort yearBC();

Год до н.э. григорианского календаря, причём год 0 считается 1 годом до н.э.

Исключения:
std.datetime.date.DateTimeException если isAD верно.
Примеры:
writeln(Date(0, 1, 1).yearBC); // 1
writeln(Date(-1, 1, 1).yearBC); // 2
writeln(Date(-100, 1, 1).yearBC); // 101
pure @property @safe void yearBC(int year);

Год до н.э. григорианского календаря, причём год 0 считается 1 годом до н.э.

Параметры:
int year Год до н.э., который нужно установить для Date.
Исключения:
std.datetime.date.DateTimeException если задано неположительное значение.
Примеры:
auto date = Date(2010, 1, 1);
date.yearBC = 1;
writeln(date); // Date(0, 1, 1)

date.yearBC = 10;
writeln(date); // Date(-9, 1, 1)
const pure nothrow @nogc @property @safe Month month();

Месяц григорианского года.

Примеры:
writeln(Date(1999, 7, 6).month); // 7
writeln(Date(2010, 10, 4).month); // 10
writeln(Date(-7, 4, 5).month); // 4
pure @property @safe void month(Month month);

Месяц григорианского года.

Параметры:
Month month Месяц, который нужно установить для Date.
Исключения:
std.datetime.date.DateTimeException если заданный месяц не является корректным или текущий день не является корректным для заданного месяца.
const pure nothrow @nogc @property @safe ubyte day();

День григорианского месяца.

Примеры:
writeln(Date(1999, 7, 6).day); // 6
writeln(Date(2010, 10, 4).day); // 4
writeln(Date(-7, 4, 5).day); // 5
pure @property @safe void day(int day);

День григорианского месяца.

Параметры:
int day День месяца, который нужно установить для Date.
Исключения:
std.datetime.date.DateTimeException если заданный день не является корректным для текущего месяца.
pure nothrow @nogc ref @safe Date add(string units)(long value, AllowDayOverflow allowOverflow = AllowDayOverflow.yes)
Constraints: if (units == "years");

Добавляет заданное количество лет или месяцев к этой Date, изменяя её. Отрицательное число вычтет.

Обратите внимание, что если переполнение дня разрешено, и дата с изменённым годом/месяцем выходит за пределы числа дней в новом месяце, то месяц будет увеличен на единицу, а день установлен на число дней переполнения. (например, если день был 31, а новый месяц — июнь, то месяц будет увеличен до июля, а новый день будет 1). Если переполнение дня не разрешено, то день будет установлен на последний допустимый день в месяце (например, 31 июня станет 30 июня).

Параметры:
units Тип единиц для добавления ("years" или "months").
long value Количество месяцев или лет для добавления к этой Date.
AllowDayOverflow allowOverflow Разрешить ли переполнение дней, вызывающее увеличение месяца.
Возвращаемое значение:
Ссылка на Date (this).
Примеры:
auto d1 = Date(2010, 1, 1);
d1.add!"months"(11);
writeln(d1); // Date(2010, 12, 1)

auto d2 = Date(2010, 1, 1);
d2.add!"months"(-11);
writeln(d2); // Date(2009, 2, 1)

auto d3 = Date(2000, 2, 29);
d3.add!"years"(1);
writeln(d3); // Date(2001, 3, 1)

auto d4 = Date(2000, 2, 29);
d4.add!"years"(1, AllowDayOverflow.no);
writeln(d4); // Date(2001, 2, 28)
pure nothrow @nogc ref @safe Date roll(string units)(long value, AllowDayOverflow allowOverflow = AllowDayOverflow.yes)
Constraints: if (units == "years");

Добавляет заданное количество лет или месяцев к этой Date, изменяя её. Отрицательное число вычтет.

Разница между методом roll и add заключается в том, что roll не влияет на более крупные единицы. Применение roll к дате, сдвигая её на 12 месяцев, даёт ту же дату. Однако дни могут всё ещё изменяться из-за разного числа дней в каждом месяце.

Поскольку нет единиц, больших чем годы, применение roll и add к годам идентично.

Параметры:
units Тип единиц для добавления ("years" или "months").
long value Количество месяцев или лет для добавления к этой Date.
AllowDayOverflow allowOverflow Разрешить ли переполнение дней, вызывающее увеличение месяца.
Возвращаемое значение:
Ссылка на Date (this).
Примеры:
auto d1 = Date(2010, 1, 1);
d1.roll!"months"(1);
writeln(d1); // Date(2010, 2, 1)

auto d2 = Date(2010, 1, 1);
d2.roll!"months"(-1);
writeln(d2); // Date(2010, 12, 1)

auto d3 = Date(1999, 1, 29);
d3.roll!"months"(1);
writeln(d3); // Date(1999, 3, 1)

auto d4 = Date(1999, 1, 29);
d4.roll!"months"(1, AllowDayOverflow.no);
writeln(d4); // Date(1999, 2, 28)

auto d5 = Date(2000, 2, 29);
d5.roll!"years"(1);
writeln(d5); // Date(2001, 3, 1)

auto d6 = Date(2000, 2, 29);
d6.roll!"years"(1, AllowDayOverflow.no);
writeln(d6); // Date(2001, 2, 28)
pure nothrow @nogc ref @safe Date roll(string units)(long days)
Constraints: if (units == "days");

Добавляет заданное количество единиц к этой Date, изменяя её. Отрицательное число вычтет.

Разница между методом roll и add заключается в том, что roll не влияет на более крупные единицы. Например, применение roll к дате, сдвигая её на количество дней в году, даёт ту же дату.

Допустимые единицы — "days".

Параметры:
units Единицы для добавления. Должны быть "days".
long days Количество дней для добавления к этой Date.
Возвращаемое значение:
Ссылка на Date (this).
Примеры:
auto d = Date(2010, 1, 1);
d.roll!"days"(1);
writeln(d); // Date(2010, 1, 2)
d.roll!"days"(365);
writeln(d); // Date(2010, 1, 26)
d.roll!"days"(-32);
writeln(d); // Date(2010, 1, 25)
const pure nothrow @nogc @safe Date opBinary(string op)(Duration duration)
Constraints: if (op == "+" || op == "-");

Результат сложения или вычитания core.time.Duration от

Допустимые виды арифметических операций для Date с этим оператором:

Date + Duration --> Date
Date - Duration --> Date

Параметры:
Duration duration core.time.Duration для сложения или вычитания от этой даты Date.
Примеры:
import core.time : days;

writeln(Date(2015, 12, 31) + days(1)); // Date(2016, 1, 1)
writeln(Date(2004, 2, 26) + days(4)); // Date(2004, 3, 1)

writeln(Date(2016, 1, 1) - days(1)); // Date(2015, 12, 31)
writeln(Date(2004, 3, 1) - days(4)); // Date(2004, 2, 26)
pure nothrow @nogc ref @safe Date opOpAssign(string op)(Duration duration)
Constraints: if (op == "+" || op == "-");

Результат сложения или вычитания core.time.Duration от этой Date, с присвоением результата этой Date.

Допустимые виды арифметических операций для Date с этим оператором:

Date + Duration --> Date
Date - Duration --> Date

Параметры:
Duration duration core.time.Duration для сложения или вычитания от этой даты Date.
const pure nothrow @nogc @safe Duration opBinary(string op)(Date rhs)
Constraints: if (op == "-");

Разница между двумя Dates.

Допустимые виды арифметических операций для Date с этим оператором:

Date - Date --> duration

const pure nothrow @nogc @safe int diffMonths(Date rhs);

Возвращает разницу между двумя датами в месяцах.

Чтобы получить разницу в годах, вычтите свойство year двух дат. Чтобы получить разницу в днях или неделях, вычтите сами даты и используйте получившуюся продолжительность. Поскольку преобразование между месяцами и меньшими единицами требует конкретной даты (которой у продолжительности нет), для получения разницы в месяцах требуется немного математики, использующей и свойство года, и свойство месяца, поэтому эта функция удобна для получения разницы в месяцах.

Обратите внимание, что количество дней в месяцах или на какой стадии месяца находится любая дата не имеет значения. Это разница в свойстве месяца в сочетании с разницей в годах * 12. Например, 31 декабря и 1 января находятся в одном месяце, точно так же, как 1 декабря и 31 января находятся в одном месяце.

Параметры:
Date rhs Дата, которую нужно вычесть из этой.
Примеры:
writeln(Date(1999, 2, 1).diffMonths(Date(1999, 1, 31))); // 1
writeln(Date(1999, 1, 31).diffMonths(Date(1999, 2, 1))); // -1
writeln(Date(1999, 3, 1).diffMonths(Date(1999, 1, 1))); // 2
writeln(Date(1999, 1, 1).diffMonths(Date(1999, 3, 31))); // -2
const pure nothrow @nogc @property @safe bool isLeapYear();

Является ли текущая дата високосным годом.

const pure nothrow @nogc @property @safe DayOfWeek dayOfWeek();

День недели, на котором находится эта дата.

const pure nothrow @nogc @property @safe ushort dayOfYear();

Номер дня в году для этой даты.

Примеры:
writeln(Date(1999, 1, 1).dayOfYear); // 1
writeln(Date(1999, 12, 31).dayOfYear); // 365
writeln(Date(2000, 12, 31).dayOfYear); // 366
pure @property @safe void dayOfYear(int day);

Номер дня в году.

Параметры:
int day Номер дня в году, на который нужно установить эту дату.
Исключения:
std.datetime.date.DateTimeException, если заданный день является недопустимым.
const pure nothrow @nogc @property @safe int dayOfGregorianCal();

Номер дня в григорианском календаре, на котором находится эта дата.

Примеры:
writeln(Date(1, 1, 1).dayOfGregorianCal); // 1
writeln(Date(1, 12, 31).dayOfGregorianCal); // 365
writeln(Date(2, 1, 1).dayOfGregorianCal); // 366

writeln(Date(0, 12, 31).dayOfGregorianCal); // 0
writeln(Date(0, 1, 1).dayOfGregorianCal); // -365
writeln(Date(-1, 12, 31).dayOfGregorianCal); // -366

writeln(Date(2000, 1, 1).dayOfGregorianCal); // 730_120
writeln(Date(2010, 12, 31).dayOfGregorianCal); // 734_137
pure nothrow @nogc @property @safe void dayOfGregorianCal(int day);

Номер дня в григорианском календаре, на который нужно установить эту дату.

Параметры:
int day День григорианского календаря, на который нужно установить эту дату.
Примеры:
auto date = Date.init;
date.dayOfGregorianCal = 1;
writeln(date); // Date(1, 1, 1)

date.dayOfGregorianCal = 365;
writeln(date); // Date(1, 12, 31)

date.dayOfGregorianCal = 366;
writeln(date); // Date(2, 1, 1)

date.dayOfGregorianCal = 0;
writeln(date); // Date(0, 12, 31)

date.dayOfGregorianCal = -365;
writeln(date); // Date(-0, 1, 1)

date.dayOfGregorianCal = -366;
writeln(date); // Date(-1, 12, 31)

date.dayOfGregorianCal = 730_120;
writeln(date); // Date(2000, 1, 1)

date.dayOfGregorianCal = 734_137;
writeln(date); // Date(2010, 12, 31)
const pure nothrow @property @safe auto isoWeekAndYear();

Неделя и год ISO 8601 года, в котором находится эта дата.

Возвращаемое значение:
Анонимная структура с членами isoWeekYear для результающего года и isoWeek для результающей недели ISO.
См. также:
ISO Week Date
const pure nothrow @property @safe ubyte isoWeek();

Номер недели ISO 8601 года, в которой находится эта дата.

См. также:
ISO Week Date
const pure nothrow @property @safe short isoWeekYear();

Год в календаре ISO 8601 недели, в котором находится эта дата.

Может отличаться от года между 28 декабря и 4 января.

См. также:
ISO Week Date
const pure nothrow @property @safe Date endOfMonth();

Дата последнего дня месяца, в котором находится эта дата.

Примеры:
writeln(Date(1999, 1, 6).endOfMonth); // Date(1999, 1, 31)
writeln(Date(1999, 2, 7).endOfMonth); // Date(1999, 2, 28)
writeln(Date(2000, 2, 7).endOfMonth); // Date(2000, 2, 29)
writeln(Date(2000, 6, 4).endOfMonth); // Date(2000, 6, 30)
const pure nothrow @nogc @property @safe ubyte daysInMonth();

Последний день месяца, в котором находится эта дата.

Примеры:
writeln(Date(1999, 1, 6).daysInMonth); // 31
writeln(Date(1999, 2, 7).daysInMonth); // 28
writeln(Date(2000, 2, 7).daysInMonth); // 29
writeln(Date(2000, 6, 4).daysInMonth); // 30
const pure nothrow @nogc @property @safe bool isAD();

Является ли текущий год годом нашей эры.

Примеры:
assert(Date(1, 1, 1).isAD);
assert(Date(2010, 12, 31).isAD);
assert(!Date(0, 12, 31).isAD);
assert(!Date(-2010, 1, 1).isAD);
const pure nothrow @nogc @property @safe long julianDay();

Юлианский день для этой даты в полдень (поскольку юлианский день меняется в полдень).

const pure nothrow @nogc @property @safe long modJulianDay();

Модифицированный юлианский день для любого времени в эту дату (так как модифицированный юлианский день меняется в полночь).

const pure nothrow @safe string toISOString();

const void toISOString(W)(ref W writer)
Constraints: if (isOutputRange!(W, char));

Преобразует эту дату в строку в формате YYYYMMDD. Если writer задан, результирующая строка будет записана непосредственно в него.

Параметры:
W writer Диапазон, принимающий строковые значения.
Возвращаемое значение:
Строка, когда не используется диапазон вывода; void в противном случае.
Примеры:
writeln(Date(2010, 7, 4).toISOString()); // "20100704"
writeln(Date(1998, 12, 25).toISOString()); // "19981225"
writeln(Date(0, 1, 5).toISOString()); // "00000105"
writeln(Date(-4, 1, 5).toISOString()); // "-00040105"
const pure nothrow @safe string toISOExtString();

const void toISOExtString(W)(ref W writer)
Constraints: if (isOutputRange!(W, char));

Преобразует эту дату в строку в формате YYYY-MM-DD. Если writer задан, результирующая строка будет записана непосредственно в него.

Параметры:
W writer Диапазон, принимающий строковые значения.
Возвращаемое значение:
Строка, когда не используется диапазон вывода; void в противном случае.
Примеры:
writeln(Date(2010, 7, 4).toISOExtString()); // "2010-07-04"
writeln(Date(1998, 12, 25).toISOExtString()); // "1998-12-25"
writeln(Date(0, 1, 5).toISOExtString()); // "0000-01-05"
writeln(Date(-4, 1, 5).toISOExtString()); // "-0004-01-05"
const pure nothrow @safe string toSimpleString();

const void toSimpleString(W)(ref W writer)
Constraints: if (isOutputRange!(W, char));

Преобразует эту дату в строку в формате YYYY-Mon-DD. Если writer задан, результирующая строка будет записана непосредственно в него.

Параметры:
W writer Диапазон, принимающий строковые значения.
Возвращаемое значение:
Строка, когда не используется диапазон вывода; void в противном случае.
Примеры:
writeln(Date(2010, 7, 4).toSimpleString()); // "2010-Jul-04"
writeln(Date(1998, 12, 25).toSimpleString()); // "1998-Dec-25"
writeln(Date(0, 1, 5).toSimpleString()); // "0000-Jan-05"
writeln(Date(-4, 1, 5).toSimpleString()); // "-0004-Jan-05"
const pure nothrow @safe string toString();

const void toString(W)(ref W writer)
Constraints: if (isOutputRange!(W, char));

Преобразует эту дату в строку.

Эта функция предназначена для удобного преобразования даты в строку для кода, которому неважен точный формат, а только ясное представление информации. Она также упрощает преобразование даты в строку при использовании функций, таких как to!string, format, или writeln, которые используют toString для преобразования типов, определенных пользователем. Поэтому вряд ли много кода будет вызывать toString напрямую.

Формат строки намеренно не определен, и код, которому важен формат, должен использовать toISOString, toISOExtString, toSimpleString, или другую пользовательскую функцию форматирования, которая явно генерирует необходимый формат. Причина в том, что код затем ясно указывает используемый формат, что делает его менее подверженным ошибкам при обслуживании кода и взаимодействии с другим программным обеспечением, которое потребляет сгенерированные строки. По этой же причине у даты нет функции fromString, но есть fromISOString, fromISOExtString, и fromSimpleString.

Формат, возвращаемый toString, может измениться в будущем.

pure @safe Date fromISOString(S)(scope const S isoString)
Constraints: if (isSomeString!S);

Создаёт Date из строки с форматом ГГГГММДД. Пробелы из заданной строки удаляются.

Параметры:
S isoString Строка, отформатированная в формате ISO для дат.
Исключения:
std.datetime.date.DateTimeException, если заданная строка не соответствует формату ISO или полученный Date не является допустимым.
pure @safe Date fromISOExtString(S)(scope const S isoExtString)
Constraints: if (isSomeString!S);

Создаёт Date из строки с форматом ГГГГ-ММ-ДД. Пробелы из заданной строки удаляются.

Параметры:
S isoExtString Строка, отформатированная в расширенном формате ISO для дат.
Исключения:
std.datetime.date.DateTimeException, если заданная строка не соответствует расширенному формату ISO или полученный Date не является допустимым.
pure @safe Date fromSimpleString(S)(scope const S simpleString)
Constraints: if (isSomeString!S);

Создаёт Date из строки с форматом ГГГГ-Мес-ДД. Пробелы из заданной строки удаляются.

Параметры:
S simpleString Строка, отформатированная так же, как функция toSimpleString форматирует даты.
Исключения:
std.datetime.date.DateTimeException, если заданная строка не соответствует формату или полученный Date не является допустимым.
static pure nothrow @nogc @property @safe Date min();

Возвращает Date наибольшего прошлого значения, которое представимо с помощью Date.

static pure nothrow @nogc @property @safe Date max();

Возвращает Date наибольшего будущего значения, которое представимо с помощью Date.

struct TimeOfDay;

Представляет время суток с часами, минутами и секундами. Используется 24-часовой формат.

Примеры:
import core.time : minutes, seconds;

auto t = TimeOfDay(12, 30, 0);

t += 10.minutes + 100.seconds;
writeln(t); // TimeOfDay(12, 41, 40)

writeln(t.toISOExtString()); // "12:41:40"
writeln(t.toISOString()); // "124140"

writeln(TimeOfDay.fromISOExtString("15:00:00")); // TimeOfDay(15, 0, 0)
writeln(TimeOfDay.fromISOString("015000")); // TimeOfDay(1, 50, 0)
pure @safe this(int hour, int minute, int second = 0);
Параметры:
int hour Час дня [0 - 24).
int minute Минута часа [0 - 60).
int second Секунда минуты [0 - 60).
Исключения:
std.datetime.date.DateTimeException, если полученный TimeOfDay будет недействительным.
const pure nothrow @nogc @safe int opCmp(TimeOfDay rhs);

Сравнивает этот TimeOfDay с заданным TimeOfDay.

Возвращает:
this < rhs < 0
this == rhs 0
this > rhs > 0
const pure nothrow @nogc @property @safe ubyte hour();

Часы после полуночи.

pure @property @safe void hour(int hour);

Часы после полуночи.

Параметры:
int hour Час дня, на который нужно установить час этого TimeOfDay.
Исключения:
std.datetime.date.DateTimeException, если заданный час приведет к недействительному TimeOfDay.
const pure nothrow @nogc @property @safe ubyte minute();

Минуты после часа.

pure @property @safe void minute(int minute);

Минуты после часа.

Параметры:
int minute Минута, на которую нужно установить минуту этого TimeOfDay.
Исключения:
std.datetime.date.DateTimeException, если заданная минута приведет к недействительному TimeOfDay.
const pure nothrow @nogc @property @safe ubyte second();

Секунды после минуты.

pure @property @safe void second(int second);

Секунды после минуты.

Параметры:
int second Секунда, на которую нужно установить секунду этого TimeOfDay.
Исключения:
std.datetime.date.DateTimeException, если заданная секунда приведет к недействительному TimeOfDay.
pure nothrow @nogc ref @safe TimeOfDay roll(string units)(long value)
Constraints: if (units == "hours");

pure nothrow @nogc ref @safe TimeOfDay roll(string units)(long value)
Constraints: if (units == "minutes" || units == "seconds");

Добавляет заданное количество единиц к этому TimeOfDay, изменяя его. Отрицательное число вычтет.

Разница между сдвигом и добавлением заключается в том, что сдвиг не влияет на более крупные единицы. Например, сдвиг TimeOfDay на один час минут дает точно такой же TimeOfDay.

Допустимые единицы — "hours", "minutes", и "seconds".

Параметры:
units Единицы для добавления.
long value Количество units для добавления к этому TimeOfDay.
Возвращает:
Ссылка на TimeOfDay (this).
Примеры:
auto tod1 = TimeOfDay(7, 12, 0);
tod1.roll!"hours"(1);
writeln(tod1); // TimeOfDay(8, 12, 0)

auto tod2 = TimeOfDay(7, 12, 0);
tod2.roll!"hours"(-1);
writeln(tod2); // TimeOfDay(6, 12, 0)

auto tod3 = TimeOfDay(23, 59, 0);
tod3.roll!"minutes"(1);
writeln(tod3); // TimeOfDay(23, 0, 0)

auto tod4 = TimeOfDay(0, 0, 0);
tod4.roll!"minutes"(-1);
writeln(tod4); // TimeOfDay(0, 59, 0)

auto tod5 = TimeOfDay(23, 59, 59);
tod5.roll!"seconds"(1);
writeln(tod5); // TimeOfDay(23, 59, 0)

auto tod6 = TimeOfDay(0, 0, 0);
tod6.roll!"seconds"(-1);
writeln(tod6); // TimeOfDay(0, 0, 59)
const pure nothrow @nogc @safe TimeOfDay opBinary(string op)(Duration duration)
Constraints: if (op == "+" || op == "-");

Результат добавления или вычитания core.time.Duration из этого TimeOfDay.

Допустимые типы арифметических операций для TimeOfDay с помощью этого оператора:

TimeOfDay + Duration --> TimeOfDay
TimeOfDay - Duration --> TimeOfDay

Параметры:
Duration duration core.time.Duration для добавления или вычитания из этого TimeOfDay.
Примеры:
import core.time : hours, minutes, seconds;

writeln(TimeOfDay(12, 12, 12) + seconds(1)); // TimeOfDay(12, 12, 13)
writeln(TimeOfDay(12, 12, 12) + minutes(1)); // TimeOfDay(12, 13, 12)
writeln(TimeOfDay(12, 12, 12) + hours(1)); // TimeOfDay(13, 12, 12)
writeln(TimeOfDay(23, 59, 59) + seconds(1)); // TimeOfDay(0, 0, 0)

writeln(TimeOfDay(12, 12, 12) - seconds(1)); // TimeOfDay(12, 12, 11)
writeln(TimeOfDay(12, 12, 12) - minutes(1)); // TimeOfDay(12, 11, 12)
writeln(TimeOfDay(12, 12, 12) - hours(1)); // TimeOfDay(11, 12, 12)
writeln(TimeOfDay(0, 0, 0) - seconds(1)); // TimeOfDay(23, 59, 59)
pure nothrow @nogc ref @safe TimeOfDay opOpAssign(string op)(Duration duration)
Constraints: if (op == "+" || op == "-");

Результат добавления или вычитания core.time.Duration из этого TimeOfDay с присваиванием результата этому TimeOfDay.

Допустимые типы арифметических операций для TimeOfDay с помощью этого оператора:

TimeOfDay + Duration --> TimeOfDay
TimeOfDay - Duration --> TimeOfDay

Параметры:
Duration duration core.time.Duration для добавления или вычитания из этого TimeOfDay.
const pure nothrow @nogc @safe Duration opBinary(string op)(TimeOfDay rhs)
Constraints: if (op == "-");

Разница между двумя TimeOfDay.

Допустимые типы арифметических операций для TimeOfDay с помощью этого оператора:

TimeOfDay - TimeOfDay --> duration

Параметры:
TimeOfDay rhs TimeOfDay для вычитания из этого.
const pure nothrow @safe string toISOString();

const void toISOString(W)(ref W writer)
Constraints: if (isOutputRange!(W, char));

Преобразует этот TimeOfDay в строку формата HHMMSS. Если writer задан, результирующая строка будет записана непосредственно в него.

Параметры:
W writer Объект, принимающий диапазон вывода.
Возвращает:
Строку, если не используется диапазон вывода; иначе ничего.
Примеры:
writeln(TimeOfDay(0, 0, 0).toISOString()); // "000000"
writeln(TimeOfDay(12, 30, 33).toISOString()); // "123033"
const pure nothrow @safe string toISOExtString();

const void toISOExtString(W)(ref W writer)
Constraints: if (isOutputRange!(W, char));

Преобразует этот TimeOfDay в строку формата HH:MM:SS. Если writer задан, результирующая строка будет записана непосредственно в него.

Параметры:
W writer Объект, принимающий диапазон вывода.
Возвращает:
Строку, если не используется диапазон вывода; иначе ничего.
Примеры:
writeln(TimeOfDay(0, 0, 0).toISOExtString()); // "00:00:00"
writeln(TimeOfDay(12, 30, 33).toISOExtString()); // "12:30:33"
const pure nothrow @safe string toString();

const void toString(W)(ref W writer)
Constraints: if (isOutputRange!(W, char));

Преобразует TimeOfDay в строку.

Эта функция предназначена для удобства преобразования TimeOfDay в строку для кода, не требующего определенного формата — только четкой подачи информации. Она также упрощает преобразование TimeOfDay в строку при использовании функций, таких как to!string, format, или writeln, которые используют toString для преобразования пользовательских типов. Поэтому маловероятно, что код будет вызывать toString напрямую.

Формат строки преднамеренно не определен, и код, заинтересованный в формате строки, должен использовать toISOString, toISOExtString, или какую-либо другую пользовательскую функцию форматирования, которая явно генерирует необходимый формат. Причина в том, что код тогда явно указывает используемый формат, что делает код менее подверженным ошибкам при обслуживании и взаимодействии с другим программным обеспечением, которое использует сгенерированные строки. По этой же причине у TimeOfDay нет функции fromString, но есть fromISOString и fromISOExtString.

Формат, возвращаемый toString, может измениться в будущем.

Параметры:
W writer Объект, принимающий диапазон вывода.
Возвращает:
Строку, если не используется диапазон вывода; иначе ничего.
pure @safe TimeOfDay fromISOString(S)(scope const S isoString)
Constraints: if (isSomeString!S);

Создаёт TimeOfDay из строки с форматом HHMMSS. Пробелы из заданной строки удаляются.

Параметры:
S isoString Строка, отформатированная в формате ISO для времени.
Исключения:
std.datetime.date.DateTimeException, если заданная строка не имеет формата ISO или полученное значение TimeOfDay не будет валидным.
pure @safe TimeOfDay fromISOExtString(S)(scope const S isoExtString)
Constraints: if (isSomeString!S);

Создаёт TimeOfDay из строки с форматом HH:MM:SS. Пробелы из заданной строки удаляются.

Параметры:
S isoExtString Строка, отформатированная в расширенном формате ISO для времени.
Исключения:
std.datetime.date.DateTimeException, если заданная строка не имеет расширенного формата ISO или полученное значение TimeOfDay не будет валидным.
static pure nothrow @nogc @property @safe TimeOfDay min();

Возвращает полночь.

static pure nothrow @nogc @property @safe TimeOfDay max();

Возвращает время, на одну секунду меньшее, чем полночь.

pure nothrow @nogc @safe bool valid(string units)(int value)
Constraints: if (units == "months" || units == "hours" || units == "minutes" || units == "seconds");

Возвращает, является ли данное значение допустимым для заданного типа единицы измерения времени в точке времени. Естественно, продолжительность не ограничена определенным диапазоном, но значения в точке времени ограничены (например, месяц должен быть в диапазоне от 1 до 12 включительно).

Параметры:
units Единицы измерения времени для проверки.
int value Число для проверки.
Примеры:
assert(valid!"hours"(12));
assert(!valid!"hours"(32));
assert(valid!"months"(12));
assert(!valid!"months"(13));
pure nothrow @nogc @safe bool valid(string units)(int year, int month, int day)
Constraints: if (units == "days");

Возвращает, является ли данный день допустимым для данного года и месяца.

Параметры:
units Единицы измерения времени для проверки.
int year Год дня для проверки.
int month Месяц дня для проверки (январь — 1).
int day День для проверки.
Примеры:
assert(valid!"days"(2016, 2, 29));
assert(!valid!"days"(2016, 2, 30));
assert(valid!"days"(2017, 2, 20));
assert(!valid!"days"(2017, 2, 29));
pure @safe void enforceValid(string units)(int value, string file = __FILE__, size_t line = __LINE__)
Constraints: if (units == "months" || units == "hours" || units == "minutes" || units == "seconds");
Параметры:
units Единицы измерения времени для проверки.
int value Число для проверки.
string file Файл, который будет указан в DateTimeException при возникновении исключения.
size_t line Номер строки, который будет указан в DateTimeException при возникновении исключения.
Исключения:
DateTimeException если valid!units(value) равно false.
Примеры:
import std.exception : assertThrown, assertNotThrown;

assertNotThrown(enforceValid!"months"(10));
assertNotThrown(enforceValid!"seconds"(40));

assertThrown!DateTimeException(enforceValid!"months"(0));
assertThrown!DateTimeException(enforceValid!"hours"(24));
assertThrown!DateTimeException(enforceValid!"minutes"(60));
assertThrown!DateTimeException(enforceValid!"seconds"(60));
pure @safe void enforceValid(string units)(int year, Month month, int day, string file = __FILE__, size_t line = __LINE__)
Constraints: if (units == "days");

Так как валидность числа дня зависит как от года, так и от месяца, для проверки дня используются все три переменные.

Параметры:
units Единицы измерения времени для проверки.
int year Год дня для проверки.
Month month Месяц дня для проверки.
int day День для проверки.
string file Файл, который будет указан в DateTimeException при возникновении исключения.
size_t line Номер строки, который будет указан в DateTimeException при возникновении исключения.
Исключения:
DateTimeException если valid!"days"(year, month, day) равно false.
Примеры:
import std.exception : assertThrown, assertNotThrown;

assertNotThrown(enforceValid!"days"(2000, Month.jan, 1));
// leap year
assertNotThrown(enforceValid!"days"(2000, Month.feb, 29));

assertThrown!DateTimeException(enforceValid!"days"(2001, Month.feb, 29));
assertThrown!DateTimeException(enforceValid!"days"(2000, Month.jan, 32));
assertThrown!DateTimeException(enforceValid!"days"(2000, Month.apr, 31));
pure nothrow @nogc @safe int daysToDayOfWeek(DayOfWeek currDoW, DayOfWeek dow);

Возвращает количество дней от текущего дня недели до заданного дня недели. Если они совпадают, результат равен 0.

Параметры:
DayOfWeek currDoW Текущий день недели.
DayOfWeek dow День недели, до которого нужно получить количество дней.
Примеры:
writeln(daysToDayOfWeek(DayOfWeek.mon, DayOfWeek.mon)); // 0
writeln(daysToDayOfWeek(DayOfWeek.mon, DayOfWeek.sun)); // 6
writeln(daysToDayOfWeek(DayOfWeek.mon, DayOfWeek.wed)); // 2
pure @safe int monthsToMonth(int currMonth, int month);

Возвращает количество месяцев от текущего месяца года до заданного месяца года. Если они совпадают, результат равен 0.

Параметры:
int currMonth Текущий месяц года.
int month Месяц года, до которого нужно получить количество месяцев.
Примеры:
writeln(monthsToMonth(Month.jan, Month.jan)); // 0
writeln(monthsToMonth(Month.jan, Month.dec)); // 11
writeln(monthsToMonth(Month.jul, Month.oct)); // 3
pure nothrow @nogc @safe bool yearIsLeapYear(int year);

Является ли заданный год по григорианскому календарю високосным.

Параметры:
int year Год для проверки.
Примеры:
foreach (year; [1, 2, 100, 2001, 2002, 2003, 2005, 2006, 2007, 2009, 2010])
{
    assert(!yearIsLeapYear(year));
    assert(!yearIsLeapYear(-year));
}

foreach (year; [0, 4, 8, 400, 800, 1600, 1996, 2000, 2004, 2008, 2012])
{
    assert(yearIsLeapYear(year));
    assert(yearIsLeapYear(-year));
}
enum auto isTimePoint(T);

Определяет, реализует ли данный тип все необходимые функции для функционирования как точки времени.

  1. T должен определить статическое свойство, названное min, которое является наименьшим значением T как Unqual!T.
  2. T должен определить статическое свойство, названное max, которое является наибольшим значением T как Unqual!T.
  3. T должен определить операцию сложения и вычитания, которая принимает core.time.Duration и возвращает Unqual!T.
  4. T должен определить операцию сложения и вычитания, которая принимает core.time.Duration и возвращает ref Unqual!T.
  5. T должен определить операцию вычитания, которая принимает T и возвращает core.time.Duration.

Примеры:
import core.time : Duration;
import std.datetime.interval : Interval;
import std.datetime.systime : SysTime;

static assert(isTimePoint!Date);
static assert(isTimePoint!DateTime);
static assert(isTimePoint!SysTime);
static assert(isTimePoint!TimeOfDay);

static assert(!isTimePoint!int);
static assert(!isTimePoint!Duration);
static assert(!isTimePoint!(Interval!SysTime));
pure nothrow @nogc @safe bool validTimeUnits(string[] units...);

Являются ли все заданные строки допустимыми единицами измерения времени.

"nsecs" не считается допустимой единицей измерения времени. Ничто в std.datetime не может обрабатывать точность, большую, чем hnsecs, а те немногие функции в core.time, которые работают с "nsecs", обрабатывают это явно.

Примеры:
assert(validTimeUnits("msecs", "seconds", "minutes"));
assert(validTimeUnits("days", "weeks", "months"));
assert(!validTimeUnits("ms", "seconds", "minutes"));
pure @safe int cmpTimeUnits(string lhs, string rhs);

Сравнивает две строки единиц измерения времени. "years" являются наибольшими единицами, а "hnsecs" — наименьшими.

Возвращаемое значение:
this < rhs < 0
this == rhs 0
this > rhs > 0
Исключения:
DateTimeException если одна из заданных строк не является допустимой строкой единицы измерения времени.
Примеры:
import std.exception : assertThrown;

writeln(cmpTimeUnits("hours", "hours")); // 0
assert(cmpTimeUnits("hours", "weeks") < 0);
assert(cmpTimeUnits("months", "seconds") > 0);

assertThrown!DateTimeException(cmpTimeUnits("month", "second"));
template CmpTimeUnits(string lhs, string rhs) if (validTimeUnits(lhs, rhs))

Сравнивает две строки единиц измерения времени во время компиляции. "years" являются наибольшими единицами, а "hnsecs" — наименьшими.

Этот шаблон используется вместо cmpTimeUnits, потому что исключения не могут быть сгенерированы во время компиляции, а cmpTimeUnits должно гарантировать, что заданные строки являются допустимыми строками единиц измерения времени. В этом шаблоне используется ограничение шаблона вместо этого.

Возвращаемое значение:
this < rhs < 0
this == rhs 0
this > rhs > 0
Примеры:
static assert(CmpTimeUnits!("years", "weeks") > 0);
static assert(CmpTimeUnits!("days", "days") == 0);
static assert(CmpTimeUnits!("seconds", "hours") < 0);

© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_datetime_date.html

Spec-Zone.ru

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