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);
- 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 todstd.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 durationcore.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 rhsDateTimeдля вычитания из этой.
- Примеры:
-
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 dayX-й день григорианского календаря, для которого будет создано 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 durationcore.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 durationcore.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 durationcore.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 durationcore.time.Durationдля добавления или вычитания из этогоTimeOfDay.
- const pure nothrow @nogc @safe Duration opBinary(string op)(TimeOfDay rhs)
Constraints: if (op == "-"); -
Разница между двумя
TimeOfDay.Допустимые типы арифметических операций для
TimeOfDayс помощью этого оператора:
TimeOfDay - TimeOfDay --> duration - Параметры:
TimeOfDay rhsTimeOfDayдля вычитания из этого.
- 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);
-
Определяет, реализует ли данный тип все необходимые функции для функционирования как точки времени.
-
Tдолжен определить статическое свойство, названноеmin, которое является наименьшим значениемTкакUnqual!T. -
Tдолжен определить статическое свойство, названноеmax, которое является наибольшим значениемTкакUnqual!T. -
Tдолжен определить операцию сложения и вычитания, которая принимаетcore.time.Durationи возвращаетUnqual!T. -
Tдолжен определить операцию сложения и вычитания, которая принимаетcore.time.Durationи возвращаетref Unqual!T. -
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