std.datetime.interval
| Категория | Функции |
|---|---|
| Основные типы | Interval Direction |
| Специальные интервалы | everyDayOfWeek everyMonth everyDuration |
| Специальные интервалы | NegInfInterval PosInfInterval |
| Базовые диапазоны | IntervalRange NegInfIntervalRange PosInfIntervalRange |
| Флаги | PopFirst |
- Лицензия:
- Boost License 1.0.
- Авторы:
- Jonathan M Davis
- Исходный код
- std/datetime/interval.d
- enum Direction: int;
-
Указывает направление во времени. Пример использования — функция
Interval'sexpand, которая использует её для указания, следует ли расширять интервал назад (в прошлое), вперёд (в будущее) или в обе стороны.- bwd
-
Назад.
- fwd
-
Вперёд.
- both
-
В обе стороны.
- alias PopFirst = std.typecons.Flag!"popFirst".Flag;
-
Используется для указания, нужно ли вызывать
popFrontсразу после создания диапазона. Идея в том, что для некоторых функций, используемых для генерации диапазона для интервала,frontне обязательно является временной точкой, которая когда-либо будет сгенерирована диапазоном (например, если диапазон — это каждое воскресенье в пределах интервала, но интервал начался в понедельник), поэтому необходим способ обработки этого. Чтобы получить первую временную точку в диапазоне, соответствующую тому, что генерирует функция, используйтеPopFirst.yesдля указания, что диапазон должен иметьpopFrontвызываемый для него до возвращения диапазона, так чтоfrontявляется временной точкой, которую генерирует функция. Чтобы не соответствовать первой временной точке функции-генератору, используйтеPopFront.no.Например, если функция, используемая для генерации диапазона временных точек, генерирует последовательные Пасхи (т. е. вы перебираете все Пасхи в интервале), начальная дата, вероятно, не является Пасхой. Использование
PopFirst.yesсообщит функции, возвращающей диапазон, чтоpopFrontдолжен быть вызван, чтобы front стала Пасхой — следующей, сгенерированной функцией (в случае итерации вперёд будет Пасха, следующая за исходнойfront, в то время как при итерации назад это будет Пасха, предшествующая исходнойfront). Если используетсяPopFirst.no,frontостанется исходной временной точкой и она не обязательно будет временной точкой, сгенерированной функцией генерации диапазона (что в большинстве случаев и есть желаемое — например, если вы перебираете каждый день, начиная с начала интервала).
Если установлено значениеPopFirst.no, то popFront не вызывается перед возвращением диапазона.
В противном случае, если установлено значениеPopFirst.yes, то popFront вызывается перед возвращением диапазона. - struct Interval(TP);
-
Представляет интервал времени.
У
Intervalесть начальная и конечная точки. Интервал времени — это, следовательно, время, начиная с начальной точки и до, но не включая, конечной точки. Например:
[5 января 2010 — 10 марта 2010) [05:00:30 — 12:00:00) [04.01.1982 08:59:00 — 04.07.2010 12:00:00)
ИзIntervalможно получить диапазон, позволяющий перебирать этот интервал, причем точные временные точки, по которым производится итерация, зависят от функции, которая генерирует этот диапазон.
- pure this(U)(scope const TP begin, scope const U end)
Constraints: if (is(immutable(TP) == immutable(U))); -
- Параметры:
TP beginТочка времени, с которой начинается интервал. U endТочка времени, которая заканчивает (но не включается в) интервал.
- Исключения:
-
std.datetime.date.DateTimeException, если end предшествует begin.
- Пример
Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1));
- pure this(D)(scope const TP begin, scope const D duration)
Constraints: if (__traits(compiles, begin + duration)); -
- Параметры:
TP beginТочка времени, с которой начинается интервал. D durationПродолжительность от начальной точки до конечной точки.
- Исключения:
-
std.datetime.date.DateTimeException, если результирующийendпредшествуетbegin.
- Пример
assert(Interval!Date(Date(1996, 1, 2), dur!"days"(3)) == Interval!Date(Date(1996, 1, 2), Date(1996, 1, 5))); - pure nothrow ref Interval opAssign(ref const Interval rhs);
-
- Параметры:
Interval rhsИнтервал, который нужно назначить этому интервалу.
- pure nothrow ref Interval opAssign(Interval rhs);
-
- Параметры:
Interval rhsИнтервал, который нужно назначить этому интервалу.
- const pure nothrow @property TP begin();
-
Начальная точка интервала. Она включается в интервал.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).begin == Date(1996, 1, 2)); - pure @property void begin(TP timePoint);
-
Начальная точка интервала. Она включается в интервал.
- Параметры:
TP timePointТочка времени, на которую нужно установить начало.
- Исключения:
-
std.datetime.date.DateTimeException, если полученный интервал будет недопустимым.
- const pure nothrow @property TP end();
-
Конечная точка интервала. Она исключается из интервала.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).end == Date(2012, 3, 1)); - pure @property void end(TP timePoint);
-
Конечная точка интервала. Она исключается из интервала.
- Параметры:
TP timePointТочка времени, на которую нужно установить конец.
- Исключения:
-
std.datetime.date.DateTimeException, если полученный интервал будет недопустимым.
- const pure nothrow @property auto length();
-
Возвращает продолжительность между
beginиend.- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).length == dur!"days"(5903)); - const pure nothrow @property bool empty();
-
Является ли длина интервала 0, то есть, является ли интервал пустым.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(1996, 1, 2)).empty); assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).empty);
- const pure bool contains(scope const TP timePoint);
-
Включает ли данный интервал заданную точку времени.
- Параметры:
TP timePointТочка времени, для проверки принадлежности интервалу.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пуст.
- Пример
assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains( Date(1994, 12, 24))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains( Date(2000, 1, 5))); assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains( Date(2012, 3, 1))); - const pure bool contains(scope const Interval interval);
-
Включает ли данный интервал заданный интервал полностью.
- Параметры:
Interval intervalИнтервал для проверки принадлежности интервалу.
- Исключения:
-
std.datetime.date.DateTimeException, если любой из интервалов пуст.
- Пример
assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2)))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17)))); assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains( Interval!Date(Date(1998, 2, 28), Date(2013, 5, 1)))); - const pure bool contains(scope const PosInfInterval!TP interval);
-
Включает ли данный интервал заданный интервал полностью.
Всегда возвращает false (если интервал не пуст), т.к. интервал, идущий до положительной бесконечности, никогда не может быть полностью включен в конечный интервал.
- Параметры:
PosInfInterval!TP intervalИнтервал для проверки принадлежности интервалу.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пуст.
- Пример
assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains( PosInfInterval!Date(Date(1999, 5, 4)))); - const pure bool contains(scope const NegInfInterval!TP interval);
-
Включает ли данный интервал заданный интервал полностью.
Всегда возвращает false (если интервал не пуст), т.к. интервал, начинающийся с отрицательной бесконечности, никогда не может быть полностью включен в конечный интервал.
- Параметры:
NegInfInterval!TP intervalИнтервал для проверки принадлежности интервалу.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пуст.
- Пример
assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).contains( NegInfInterval!Date(Date(1996, 5, 4)))); - const pure bool isBefore(scope const TP timePoint);
-
Находится ли данный интервал перед заданной точкой времени.
- Параметры:
TP timePointТочка времени, для проверки, находится ли данный интервал перед ней.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пуст.
- Пример
assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore( Date(1994, 12, 24))); assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore( Date(2000, 1, 5))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore( Date(2012, 3, 1))); - const pure bool isBefore(scope const Interval interval);
-
Находится ли данный интервал перед заданным интервалом и не пересекается ли с ним.
- Параметры:
Interval intervalИнтервал для проверки.
- Исключения:
-
std.datetime.date.DateTimeException, если любой из интервалов пуст.
- Пример
assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2)))); assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17)))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore( Interval!Date(Date(2012, 3, 1), Date(2013, 5, 1)))); - const pure bool isBefore(scope const PosInfInterval!TP interval);
-
Находится ли данный интервал перед заданным интервалом и не пересекается ли с ним.
- Параметры:
PosInfInterval!TP intervalИнтервал для проверки.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пуст.
- Пример
assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore( PosInfInterval!Date(Date(1999, 5, 4)))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore( PosInfInterval!Date(Date(2013, 3, 7)))); - const pure bool isBefore(scope const NegInfInterval!TP interval);
-
Находится ли данный интервал перед заданным интервалом и не пересекается ли с ним.
Всегда возвращает false (если интервал не пуст), т.к. конечный интервал никогда не может предшествовать интервалу, начинающемуся с отрицательной бесконечности.
- Параметры:
NegInfInterval!TP intervalИнтервал для проверки.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пуст.
- Пример
assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isBefore( NegInfInterval!Date(Date(1996, 5, 4)))); - const pure bool isAfter(scope const TP timePoint);
-
Находится ли данный интервал после заданной точки времени.
- Параметры:
TP timePointТочка времени, для проверки, находится ли данный интервал после неё.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пуст.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter( Date(1994, 12, 24))); assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter( Date(2000, 1, 5))); assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter( Date(2012, 3, 1))); - const pure bool isAfter(scope const Interval interval);
-
Находится ли данный интервал после заданного интервала и не пересекается ли с ним.
- Параметры:
Interval intervalИнтервал для проверки.
- Исключения:
-
std.datetime.date.DateTimeException, если любой из интервалов пуст.
- Пример
assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2)))); assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17)))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter( Interval!Date(Date(1989, 3, 1), Date(1996, 1, 2)))); - const pure bool isAfter(scope const PosInfInterval!TP interval);
-
Находится ли данный интервал после заданного интервала и не пересекается ли с ним.
Всегда возвращает false (если интервал не пуст), т.к. конечный интервал никогда не может быть после интервала, идущего до положительной бесконечности.
- Параметры:
PosInfInterval!TP intervalИнтервал для проверки.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пуст.
- Пример
assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter( PosInfInterval!Date(Date(1999, 5, 4)))); - const pure bool isAfter(scope const NegInfInterval!TP interval);
- pure this(U)(scope const TP begin, scope const U end)
-
Является ли этот интервал после данного интервала и не пересекается ли с ним.
- Параметры:
NegInfInterval!TP intervalИнтервал для проверки по отношению к этому интервалу.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пуст.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAfter( NegInfInterval!Date(Date(1996, 1, 2)))); - const pure bool intersects(scope const Interval interval);
-
Пересекается ли данный интервал с этим интервалом.
- Параметры:
Interval intervalИнтервал, проверяемый на пересечение с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeException, если какой-либо интервал пуст.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2)))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17)))); assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects( Interval!Date(Date(1989, 3, 1), Date(1996, 1, 2)))); - const pure bool intersects(scope const PosInfInterval!TP interval);
-
Пересекается ли данный интервал с этим интервалом.
- Параметры:
PosInfInterval!TP intervalИнтервал, проверяемый на пересечение с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пуст.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects( PosInfInterval!Date(Date(1999, 5, 4)))); assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects( PosInfInterval!Date(Date(2012, 3, 1)))); - const pure bool intersects(scope const NegInfInterval!TP interval);
-
Пересекается ли данный интервал с этим интервалом.
- Параметры:
NegInfInterval!TP intervalИнтервал, проверяемый на пересечение с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пуст.
- Пример
assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects( NegInfInterval!Date(Date(1996, 1, 2)))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersects( NegInfInterval!Date(Date(2000, 1, 2)))); - const Interval intersection(scope const Interval interval);
-
Возвращает пересечение двух интервалов
- Параметры:
Interval intervalИнтервал для пересечения с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeException, если интервалы не пересекаются или если какой-либо интервал пуст.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) == Interval!Date(Date(1996, 1 , 2), Date(2000, 8, 2))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))) == Interval!Date(Date(1999, 1 , 12), Date(2011, 9, 17))); - const Interval intersection(scope const PosInfInterval!TP interval);
-
Возвращает пересечение двух интервалов
- Параметры:
PosInfInterval!TP intervalИнтервал для пересечения с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeException, если интервалы не пересекаются или если этот интервал пуст.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection( PosInfInterval!Date(Date(1990, 7, 6))) == Interval!Date(Date(1996, 1 , 2), Date(2012, 3, 1))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection( PosInfInterval!Date(Date(1999, 1, 12))) == Interval!Date(Date(1999, 1 , 12), Date(2012, 3, 1))); - const Interval intersection(scope const NegInfInterval!TP interval);
-
Возвращает пересечение двух интервалов
- Параметры:
NegInfInterval!TP intervalИнтервал для пересечения с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeException, если интервалы не пересекаются или если этот интервал пуст.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection( NegInfInterval!Date(Date(1999, 7, 6))) == Interval!Date(Date(1996, 1 , 2), Date(1999, 7, 6))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).intersection( NegInfInterval!Date(Date(2013, 1, 12))) == Interval!Date(Date(1996, 1 , 2), Date(2012, 3, 1))); - const pure bool isAdjacent(scope const Interval interval);
-
Является ли данный интервал смежным с этим интервалом.
- Параметры:
Interval intervalИнтервал, проверяемый на смежность с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeException, если какой-либо интервал пуст.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent( Interval!Date(Date(1990, 7, 6), Date(1996, 1, 2)))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent( Interval!Date(Date(2012, 3, 1), Date(2013, 9, 17)))); assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent( Interval!Date(Date(1989, 3, 1), Date(2012, 3, 1)))); - const pure bool isAdjacent(scope const PosInfInterval!TP interval);
-
Является ли данный интервал смежным с этим интервалом.
- Параметры:
PosInfInterval!TP intervalИнтервал, проверяемый на смежность с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пуст.
- Пример
assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent( PosInfInterval!Date(Date(1999, 5, 4)))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent( PosInfInterval!Date(Date(2012, 3, 1)))); - const pure bool isAdjacent(scope const NegInfInterval!TP interval);
-
Является ли данный интервал смежным с этим интервалом.
- Параметры:
NegInfInterval!TP intervalИнтервал, проверяемый на смежность с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пуст.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent( NegInfInterval!Date(Date(1996, 1, 2)))); assert(!Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).isAdjacent( NegInfInterval!Date(Date(2000, 1, 2)))); - const Interval merge(scope const Interval interval);
-
Возвращает объединение двух интервалов
- Параметры:
Interval intervalИнтервал для объединения с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeException, если интервалы не пересекаются и не являются смежными, или если какой-либо интервал пуст.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) == Interval!Date(Date(1990, 7 , 6), Date(2012, 3, 1))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge( Interval!Date(Date(2012, 3, 1), Date(2013, 5, 7))) == Interval!Date(Date(1996, 1 , 2), Date(2013, 5, 7))); - const PosInfInterval!TP merge(scope const PosInfInterval!TP interval);
-
Возвращает объединение двух интервалов
- Параметры:
PosInfInterval!TP intervalИнтервал для объединения с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeException, если интервалы не пересекаются и не являются смежными, или если этот интервал пуст.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge( PosInfInterval!Date(Date(1990, 7, 6))) == PosInfInterval!Date(Date(1990, 7 , 6))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge( PosInfInterval!Date(Date(2012, 3, 1))) == PosInfInterval!Date(Date(1996, 1 , 2))); - const NegInfInterval!TP merge(scope const NegInfInterval!TP interval);
-
Возвращает объединение двух интервалов
- Параметры:
NegInfInterval!TP intervalИнтервал для объединения с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeException, если интервалы не пересекаются и не являются смежными, или если этот интервал пуст.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge( NegInfInterval!Date(Date(1996, 1, 2))) == NegInfInterval!Date(Date(2012, 3 , 1))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).merge( NegInfInterval!Date(Date(2013, 1, 12))) == NegInfInterval!Date(Date(2013, 1 , 12))); - const pure Interval span(scope const Interval interval);
-
Возвращает интервал, охватывающий с самого раннего момента времени двух интервалов до (но не включая) самого позднего момента времени двух интервалов.
- Параметры:
Interval intervalИнтервал для создания диапазона вместе с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeException, если какой-либо интервал пуст.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span( Interval!Date(Date(1990, 7, 6), Date(1991, 1, 8))) == Interval!Date(Date(1990, 7 , 6), Date(2012, 3, 1))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span( Interval!Date(Date(2012, 3, 1), Date(2013, 5, 7))) == Interval!Date(Date(1996, 1 , 2), Date(2013, 5, 7))); - const pure PosInfInterval!TP span(scope const PosInfInterval!TP interval);
-
Возвращает интервал, охватывающий с самого раннего момента времени двух интервалов до (но не включая) самого позднего момента времени двух интервалов.
- Параметры:
PosInfInterval!TP intervalИнтервал для создания диапазона вместе с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пуст.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span( PosInfInterval!Date(Date(1990, 7, 6))) == PosInfInterval!Date(Date(1990, 7 , 6))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span( PosInfInterval!Date(Date(2050, 1, 1))) == PosInfInterval!Date(Date(1996, 1 , 2))); - const pure NegInfInterval!TP span(scope const NegInfInterval!TP interval);
-
Возвращает интервал, охватывающий с самого раннего момента времени двух интервалов до (но не включая) самого позднего момента времени двух интервалов.
- Параметры:
NegInfInterval!TP intervalИнтервал для создания диапазона вместе с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пуст.
- Пример
assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span( NegInfInterval!Date(Date(1602, 5, 21))) == NegInfInterval!Date(Date(2012, 3 , 1))); assert(Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)).span( NegInfInterval!Date(Date(2013, 1, 12))) == NegInfInterval!Date(Date(2013, 1 , 12))); - pure void shift(D)(D duration)
Constraints: if (__traits(compiles, begin + duration)); -
Перемещает интервал вперёд или назад во времени на заданную длительность (положительная длительность перемещает интервал вперёд; отрицательная — назад). Эффективно, это
begin += durationиend += duration.- Параметры:
D durationДлительность сдвига интервала.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пуст или если полученный интервал будет недопустимым.
- Пример
auto interval1 = Interval!Date(Date(1996, 1, 2), Date(2012, 4, 5)); auto interval2 = Interval!Date(Date(1996, 1, 2), Date(2012, 4, 5)); interval1.shift(dur!"days"(50)); assert(interval1 == Interval!Date(Date(1996, 2, 21), Date(2012, 5, 25))); interval2.shift(dur!"days"(-50)); assert(interval2 == Interval!Date(Date(1995, 11, 13), Date(2012, 2, 15)));
- void shift(T)(T years, T months = 0, AllowDayOverflow allowOverflow = AllowDayOverflow.yes)
Constraints: if (isIntegral!T);
-
-
Перемещает интервал вперёд или назад во времени на указанное количество лет и/или месяцев (положительное число лет и месяцев сдвигает интервал вперёд, отрицательное — назад). Добавляет указанные годы и месяцы к началу и концу интервала. Эффективно вызывает
add!"years"()и затемadd!"months"()для начала и конца с указанным числом лет и месяцев.- Параметры:
T yearsКоличество лет для сдвига интервала. T monthsКоличество месяцев для сдвига интервала. AllowDayOverflow allowOverflowДопускать ли переполнение дней в beginиend, что вызовет увеличение месяца.
- Исключения:
-
std.datetime.date.DateTimeException, если интервал пустой или результирующий интервал будет некорректным.
- Пример
auto interval1 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)); auto interval2 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)); interval1.shift(2); assert(interval1 == Interval!Date(Date(1998, 1, 2), Date(2014, 3, 1))); interval2.shift(-2); assert(interval2 == Interval!Date(Date(1994, 1, 2), Date(2010, 3, 1)));
- pure void expand(D)(D duration, Direction dir = Direction.both)
Constraints: if (__traits(compiles, begin + duration)); -
Расширяет интервал вперёд и/или назад во времени. Эффективно выполняет
begin -= durationи/илиend += duration. Направление расширения вперёд/назад определяется параметром dir.- Параметры:
D durationДлительность расширения интервала. Direction dirНаправление расширения интервала во времени.
- Исключения:
-
std.datetime.date.DateTimeException, если интервал пустой или результирующий интервал будет некорректным.
- Пример
auto interval1 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)); auto interval2 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)); interval1.expand(2); assert(interval1 == Interval!Date(Date(1994, 1, 2), Date(2014, 3, 1))); interval2.expand(-2); assert(interval2 == Interval!Date(Date(1998, 1, 2), Date(2010, 3, 1)));
- void expand(T)(T years, T months = 0, AllowDayOverflow allowOverflow = AllowDayOverflow.yes, Direction dir = Direction.both)
Constraints: if (isIntegral!T); -
Расширяет интервал вперёд и/или назад во времени. Эффективно вычитает заданное количество месяцев/лет из
beginи добавляет их кend. Направление расширения вперёд/назад определяется параметром dir.- Параметры:
T yearsКоличество лет для расширения интервала. T monthsКоличество месяцев для расширения интервала. AllowDayOverflow allowOverflowДопускать ли переполнение дней в beginиend, что вызовет увеличение месяца.Direction dirНаправление расширения интервала во времени.
- Исключения:
-
std.datetime.date.DateTimeException, если интервал пустой или результирующий интервал будет некорректным.
- Пример
auto interval1 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)); auto interval2 = Interval!Date(Date(1996, 1, 2), Date(2012, 3, 1)); interval1.expand(2); assert(interval1 == Interval!Date(Date(1994, 1, 2), Date(2014, 3, 1))); interval2.expand(-2); assert(interval2 == Interval!Date(Date(1998, 1, 2), Date(2010, 3, 1)));
- const IntervalRange!(TP, Direction.fwd) fwdRange(TP delegate(scope const TP) func, PopFirst popFirst = PopFirst.no);
-
Возвращает диапазон, который итерирует вперёд по интервалу, начиная с
begin, используя func для генерации каждой последующей точки времени.Начало диапазона —
frontинтервала. func используется для генерации следующейfrontпри вызовеpopFront. Если popFirst —PopFirst.yes, тоpopFrontвызывается перед возвратом диапазона (чтобыfrontбыла точкой времени, которую func сгенерировал бы).
Если func когда-либо сгенерирует точку времени, меньшую или равную текущейfrontдиапазона, будет выброшено исключениеstd.datetime.date.DateTimeException. Диапазон будет пустым и итерация завершится, когда func сгенерирует точку времени, равную или превосходящуюendинтервала.
В этом модуле есть вспомогательные функции для генерации общих делегатов для передачи вfwdRange. Их документация начинается с «Функция генерации диапазона», что облегчает поиск.- Параметры:
TP delegate(scope const TP) funcФункция, используемая для генерации точек времени диапазона по интервалу. PopFirst popFirstВызывать ли popFrontв диапазоне перед возвратом.
- Исключения:
-
std.datetime.date.DateTimeException, если интервал пустой.
- Предупреждение
- func должна быть логически чистой. В идеале func должна быть указателем на функцию, но принудительное требование func быть чистой слишком ограничительно, а для удобства использования функций, генерирующих функции для передачи в
fwdRange, func должна быть делегатом.
saveне сохранил состояние диапазона. Чтобы избежать таких ошибок, не передавайте вfwdRangeделегат, который не является логически чистым. Если func получает одну и ту же точку времени при двух различных вызовах, она должна возвращать один и тот же результат оба раза. Конечно, ни одна из функций в этом модуле не имеет этой проблемы, поэтому это актуально только при создании пользовательских делегатов.- Пример
auto interval = Interval!Date(Date(2010, 9, 1), Date(2010, 9, 9)); auto func = delegate (scope const Date date) // For iterating over even-numbered days. { if ((date.day & 1) == 0) return date + dur!"days"(2); return date + dur!"days"(1); }; auto range = interval.fwdRange(func); // An odd day. Using PopFirst.yes would have made this Date(2010, 9, 2). assert(range.front == Date(2010, 9, 1)); range.popFront(); assert(range.front == Date(2010, 9, 2)); range.popFront(); assert(range.front == Date(2010, 9, 4)); range.popFront(); assert(range.front == Date(2010, 9, 6)); range.popFront(); assert(range.front == Date(2010, 9, 8)); range.popFront(); assert(range.empty); - const IntervalRange!(TP, Direction.bwd) bwdRange(TP delegate(scope const TP) func, PopFirst popFirst = PopFirst.no);
-
Возвращает диапазон, который итерирует назад по интервалу, начиная с
end, используя func для генерации каждой последующей точки времени.Начало диапазона —
frontинтервала. func используется для генерации следующейfrontпри вызовеpopFront. Если popFirst —PopFirst.yes, тоpopFrontвызывается перед возвратом диапазона (чтобыfrontбыла точкой времени, которую func сгенерировал бы).
Если func когда-либо сгенерирует точку времени, большую или равную текущейfrontдиапазона, будет выброшено исключениеstd.datetime.date.DateTimeException. Диапазон будет пустым и итерация завершится, когда func сгенерирует точку времени, равную или меньшуюbeginинтервала.
В этом модуле есть вспомогательные функции для генерации общих делегатов для передачи вbwdRange. Их документация начинается с «Функция генерации диапазона», что облегчает поиск.- Параметры:
TP delegate(scope const TP) funcФункция, используемая для генерации точек времени диапазона по интервалу. PopFirst popFirstВызывать ли popFrontв диапазоне перед возвратом.
- Исключения:
-
std.datetime.date.DateTimeException, если интервал пустой.
- Предупреждение
- func должна быть логически чистой. В идеале func должна быть указателем на функцию, но принудительное требование func быть чистой слишком ограничительно, а для удобства использования функций, генерирующих функции для передачи в
fwdRange, func должна быть делегатом.
saveне сохранил состояние диапазона. Чтобы избежать таких ошибок, не передавайте вfwdRangeделегат, который не является логически чистым. Если func получает одну и ту же точку времени при двух различных вызовах, она должна возвращать один и тот же результат оба раза. Конечно, ни одна из функций в этом модуле не имеет этой проблемы, поэтому это актуально только для пользовательских делегатов.- Пример
auto interval = Interval!Date(Date(2010, 9, 1), Date(2010, 9, 9)); auto func = delegate (scope const Date date) // For iterating over even-numbered days. { if ((date.day & 1) == 0) return date - dur!"days"(2); return date - dur!"days"(1); }; auto range = interval.bwdRange(func); // An odd day. Using PopFirst.yes would have made this Date(2010, 9, 8). assert(range.front == Date(2010, 9, 9)); range.popFront(); assert(range.front == Date(2010, 9, 8)); range.popFront(); assert(range.front == Date(2010, 9, 6)); range.popFront(); assert(range.front == Date(2010, 9, 4)); range.popFront(); assert(range.front == Date(2010, 9, 2)); range.popFront(); assert(range.empty); - const nothrow @safe string toString();
const void toString(Writer)(ref Writer w)
Constraints: if (isOutputRange!(Writer, char)); -
Преобразует этот интервал в строку.
- Параметры:
Writer wДиапазон, принимающий выводной диапазон
- Возвращает:
- Строку при отсутствии выводного диапазона; выводной диапазон в противном случае.
-
- struct PosInfInterval(TP);
-
Представляет временной интервал, в котором конечная точка — положительная бесконечность.
Любые диапазоны, итерирующие по
PosInfInterval, являются бесконечными. Поэтому основное назначениеPosInfInterval— создать бесконечный диапазон, начинающийся в определённую точку времени и простирающийся до положительной бесконечности.
- pure nothrow this(scope const TP begin);
-
- Параметры:
TP beginМомент времени, с которого начинается интервал.
- Пример
auto interval = PosInfInterval!Date(Date(1996, 1, 2));
- pure nothrow ref PosInfInterval opAssign(ref const PosInfInterval rhs);
-
- Параметры:
PosInfInterval rhsИнтервал, который нужно назначить этому.
- pure nothrow ref PosInfInterval opAssign(PosInfInterval rhs);
-
- Параметры:
PosInfInterval rhsИнтервал, который нужно назначить этому.
- const pure nothrow @property TP begin();
-
Начальная точка интервала. Она включена в интервал.
- Пример
assert(PosInfInterval!Date(Date(1996, 1, 2)).begin == Date(1996, 1, 2));
- pure nothrow @property void begin(TP timePoint);
-
Начальная точка интервала. Она включена в интервал.
- Параметры:
TP timePointМомент времени, который нужно установить.
- enum bool empty;
-
Является ли длина интервала 0. Всегда возвращает false.
- Пример
assert(!PosInfInterval!Date(Date(1996, 1, 2)).empty);
- const pure nothrow bool contains(TP timePoint);
-
Является ли данный момент времени частью этого интервала.
- Параметры:
TP timePointМомент времени, для которого нужно проверить включение в интервал.
- Пример
assert(!PosInfInterval!Date(Date(1996, 1, 2)).contains(Date(1994, 12, 24))); assert(PosInfInterval!Date(Date(1996, 1, 2)).contains(Date(2000, 1, 5)));
- const pure bool contains(scope const Interval!TP interval);
-
Является ли заданный интервал полностью частью этого интервала.
- Параметры:
Interval!TP intervalИнтервал, для которого нужно проверить включение в этот интервал.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли заданный интервал пустой.
- Пример
assert(!PosInfInterval!Date(Date(1996, 1, 2)).contains( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2)))); assert(PosInfInterval!Date(Date(1996, 1, 2)).contains( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17)))); assert(PosInfInterval!Date(Date(1996, 1, 2)).contains( Interval!Date(Date(1998, 2, 28), Date(2013, 5, 1)))); - const pure nothrow bool contains(scope const PosInfInterval interval);
-
Является ли заданный интервал полностью частью этого интервала.
- Параметры:
PosInfInterval intervalИнтервал, для которого нужно проверить включение в этот интервал.
- Пример
assert(PosInfInterval!Date(Date(1996, 1, 2)).contains( PosInfInterval!Date(Date(1999, 5, 4)))); assert(!PosInfInterval!Date(Date(1996, 1, 2)).contains( PosInfInterval!Date(Date(1995, 7, 2)))); - const pure nothrow bool contains(scope const NegInfInterval!TP interval);
-
Является ли заданный интервал полностью частью этого интервала.
Всегда возвращает false, потому что интервал, уходящий в положительную бесконечность, никогда не может содержать интервал, начинающийся в минус бесконечности.
- Параметры:
NegInfInterval!TP intervalИнтервал, для которого нужно проверить включение в этот интервал.
- Пример
assert(!PosInfInterval!Date(Date(1996, 1, 2)).contains( NegInfInterval!Date(Date(1996, 5, 4)))); - const pure nothrow bool isBefore(scope const TP timePoint);
-
Находится ли этот интервал до заданного момента времени.
Всегда возвращает false, так как интервал, уходящий в положительную бесконечность, никогда не может быть раньше любого момента времени.
- Параметры:
TP timePointМомент времени, для которого нужно проверить, является ли этот интервал раньше.
- Пример
assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore(Date(1994, 12, 24))); assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore(Date(2000, 1, 5)));
- const pure bool isBefore(scope const Interval!TP interval);
-
Находится ли этот интервал до заданного интервала и не пересекается ли с ним.
Всегда возвращает false (если заданный интервал не пустой), так как интервал, уходящий в положительную бесконечность, никогда не может быть раньше любого другого интервала.
- Параметры:
Interval!TP intervalИнтервал, для сравнения с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли заданный интервал пустой.
- Пример
assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2)))); assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17)))); - const pure nothrow bool isBefore(scope const PosInfInterval interval);
-
Находится ли этот интервал до заданного интервала и не пересекается ли с ним.
Всегда возвращает false, так как интервал, уходящий в положительную бесконечность, никогда не может быть раньше любого другого интервала.
- Параметры:
PosInfInterval intervalИнтервал, для сравнения с этим интервалом.
- Пример
assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore( PosInfInterval!Date(Date(1992, 5, 4)))); assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore( PosInfInterval!Date(Date(2013, 3, 7)))); - const pure nothrow bool isBefore(scope const NegInfInterval!TP interval);
-
Находится ли этот интервал до заданного интервала и не пересекается ли с ним.
Всегда возвращает false, так как интервал, уходящий в положительную бесконечность, никогда не может быть раньше любого другого интервала.
- Параметры:
NegInfInterval!TP intervalИнтервал, для сравнения с этим интервалом.
- Пример
assert(!PosInfInterval!Date(Date(1996, 1, 2)).isBefore( NegInfInterval!Date(Date(1996, 5, 4)))); - const pure nothrow bool isAfter(scope const TP timePoint);
-
Находится ли этот интервал после заданного момента времени.
- Параметры:
TP timePointМомент времени, для которого нужно проверить, является ли этот интервал позже.
- Пример
assert(PosInfInterval!Date(Date(1996, 1, 2)).isAfter(Date(1994, 12, 24))); assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter(Date(2000, 1, 5)));
- const pure bool isAfter(scope const Interval!TP interval);
-
Находится ли этот интервал после заданного интервала и не пересекается ли с ним.
- Параметры:
Interval!TP intervalИнтервал, для сравнения с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли заданный интервал пустой.
- Пример
assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2)))); assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17)))); assert(PosInfInterval!Date(Date(1996, 1, 2)).isAfter( Interval!Date(Date(1989, 3, 1), Date(1996, 1, 2)))); - const pure nothrow bool isAfter(scope const PosInfInterval interval);
-
Находится ли этот интервал после заданного интервала и не пересекается ли с ним.
Всегда возвращает false, так как интервал, уходящий в положительную бесконечность, никогда не может быть после другого интервала, уходящего в положительную бесконечность.
- Параметры:
PosInfInterval intervalИнтервал, для сравнения с этим интервалом.
- Пример
assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter( PosInfInterval!Date(Date(1990, 1, 7)))); assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter( PosInfInterval!Date(Date(1999, 5, 4)))); - const pure nothrow bool isAfter(scope const NegInfInterval!TP interval);
-
Находится ли этот интервал после заданного интервала и не пересекается ли с ним.
- Параметры:
NegInfInterval!TP intervalИнтервал, для сравнения с этим интервалом.
- Пример
assert(PosInfInterval!Date(Date(1996, 1, 2)).isAfter( NegInfInterval!Date(Date(1996, 1, 2)))); assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAfter( NegInfInterval!Date(Date(2000, 7, 1)))); - const pure bool intersects(scope const Interval!TP interval);
-
Пересекается ли заданный интервал с этим интервалом.
- Параметры:
Interval!TP intervalИнтервал, для проверки пересечения с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли заданный интервал пустой.
- Пример
assert(PosInfInterval!Date(Date(1996, 1, 2)).intersects( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2)))); assert(PosInfInterval!Date(Date(1996, 1, 2)).intersects( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17)))); assert(!PosInfInterval!Date(Date(1996, 1, 2)).intersects( Interval!Date(Date(1989, 3, 1), Date(1996, 1, 2)))); - const pure nothrow bool intersects(scope const PosInfInterval interval);
-
Пересекается ли заданный интервал с этим интервалом.
Всегда возвращает true, так как два интервала, уходящие в положительную бесконечность, всегда пересекаются.
- Параметры:
PosInfInterval intervalИнтервал, для проверки пересечения с этим интервалом.
- Пример
assert(PosInfInterval!Date(Date(1996, 1, 2)).intersects( PosInfInterval!Date(Date(1990, 1, 7)))); assert(PosInfInterval!Date(Date(1996, 1, 2)).intersects( PosInfInterval!Date(Date(1999, 5, 4)))); - const pure nothrow bool intersects(scope const NegInfInterval!TP interval);
-
Пересекается ли заданный интервал с этим интервалом.
- Параметры:
NegInfInterval!TP intervalИнтервал, для проверки пересечения с этим интервалом.
- Пример
assert(!PosInfInterval!Date(Date(1996, 1, 2)).intersects( NegInfInterval!Date(Date(1996, 1, 2)))); assert(PosInfInterval!Date(Date(1996, 1, 2)).intersects( NegInfInterval!Date(Date(2000, 7, 1)))); - const Interval!TP intersection(scope const Interval!TP interval);
-
Возвращает пересечение двух интервалов.
- Параметры:
Interval!TP intervalИнтервал для пересечения с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли интервалы не пересекаются или заданный интервал пустой.
- Пример
assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) == Interval!Date(Date(1996, 1 , 2), Date(2000, 8, 2))); assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))) == Interval!Date(Date(1999, 1 , 12), Date(2011, 9, 17))); - const pure nothrow PosInfInterval intersection(scope const PosInfInterval interval);
-
Возвращает пересечение двух интервалов.
- Параметры:
PosInfInterval intervalИнтервал для пересечения с этим интервалом.
- Пример
assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection( PosInfInterval!Date(Date(1990, 7, 6))) == PosInfInterval!Date(Date(1996, 1 , 2))); assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection( PosInfInterval!Date(Date(1999, 1, 12))) == PosInfInterval!Date(Date(1999, 1 , 12))); - const Interval!TP intersection(scope const NegInfInterval!TP interval);
-
Возвращает пересечение двух интервалов
- Параметры:
NegInfInterval!TP intervalИнтервал для пересечения с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли два интервала не пересекаются.
- Пример
assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection( NegInfInterval!Date(Date(1999, 7, 6))) == Interval!Date(Date(1996, 1 , 2), Date(1999, 7, 6))); assert(PosInfInterval!Date(Date(1996, 1, 2)).intersection( NegInfInterval!Date(Date(2013, 1, 12))) == Interval!Date(Date(1996, 1 , 2), Date(2013, 1, 12))); - const pure bool isAdjacent(scope const Interval!TP interval);
-
Является ли заданный интервал смежным с этим интервалом.
- Параметры:
Interval!TP intervalИнтервал, для проверки смежности с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли заданный интервал пустой.
- Пример
assert(PosInfInterval!Date(Date(1996, 1, 2)).isAdjacent( Interval!Date(Date(1989, 3, 1), Date(1996, 1, 2)))); assert(!PosInfInterval!Date(Date(1999, 1, 12)).isAdjacent( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17)))); - const pure nothrow bool isAdjacent(scope const PosInfInterval interval);
-
Является ли заданный интервал смежным с этим интервалом.
Всегда возвращает false, потому что два интервала, стремящиеся к положительной бесконечности, никогда не могут быть смежными друг с другом.
- Параметры:
PosInfInterval intervalИнтервал, для проверки смежности с этим интервалом.
- Пример
assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAdjacent( PosInfInterval!Date(Date(1990, 1, 7)))); assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAdjacent( PosInfInterval!Date(Date(1996, 1, 2)))); - const pure nothrow bool isAdjacent(scope const NegInfInterval!TP interval);
-
Является ли заданный интервал смежным с этим интервалом.
- Параметры:
NegInfInterval!TP intervalИнтервал, для проверки смежности с этим интервалом.
- Пример
assert(PosInfInterval!Date(Date(1996, 1, 2)).isAdjacent( NegInfInterval!Date(Date(1996, 1, 2)))); assert(!PosInfInterval!Date(Date(1996, 1, 2)).isAdjacent( NegInfInterval!Date(Date(2000, 7, 1)))); - const PosInfInterval merge(scope const Interval!TP interval);
-
Возвращает объединение двух интервалов
- Параметры:
Interval!TP intervalИнтервал для объединения с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли два интервала не пересекаются и не смежны, или если заданный интервал пуст.
- Примечание
- Нет перегрузки для
merge, которая принимаетNegInfInterval, потому что интервал, простирающийся от минус бесконечности до плюс бесконечности, невозможен.
- Пример
assert(PosInfInterval!Date(Date(1996, 1, 2)).merge( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) == PosInfInterval!Date(Date(1990, 7 , 6))); assert(PosInfInterval!Date(Date(1996, 1, 2)).merge( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))) == PosInfInterval!Date(Date(1996, 1 , 2))); - const pure nothrow PosInfInterval merge(scope const PosInfInterval interval);
-
Возвращает объединение двух интервалов
- Параметры:
PosInfInterval intervalИнтервал для объединения с этим интервалом.
- Примечание
- Нет перегрузки для
merge, которая принимаетNegInfInterval, потому что интервал, простирающийся от минус бесконечности до плюс бесконечности, невозможен.
- Пример
assert(PosInfInterval!Date(Date(1996, 1, 2)).merge( PosInfInterval!Date(Date(1990, 7, 6))) == PosInfInterval!Date(Date(1990, 7 , 6))); assert(PosInfInterval!Date(Date(1996, 1, 2)).merge( PosInfInterval!Date(Date(1999, 1, 12))) == PosInfInterval!Date(Date(1996, 1 , 2))); - const pure PosInfInterval span(scope const Interval!TP interval);
-
Возвращает интервал, охватывающий от самого раннего временного момента двух интервалов до (но не включая) самого позднего временного момента двух интервалов.
- Параметры:
Interval!TP intervalИнтервал для создания диапазона вместе с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли заданный интервал пустой.
- Примечание
- Нет перегрузки для
span, которая принимаетNegInfInterval, потому что интервал, простирающийся от минус бесконечности до плюс бесконечности, невозможен.
- Пример
assert(PosInfInterval!Date(Date(1996, 1, 2)).span( Interval!Date(Date(500, 8, 9), Date(1602, 1, 31))) == PosInfInterval!Date(Date(500, 8, 9))); assert(PosInfInterval!Date(Date(1996, 1, 2)).span( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) == PosInfInterval!Date(Date(1990, 7 , 6))); assert(PosInfInterval!Date(Date(1996, 1, 2)).span( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17))) == PosInfInterval!Date(Date(1996, 1 , 2))); - const pure nothrow PosInfInterval span(scope const PosInfInterval interval);
-
Возвращает интервал, охватывающий от самого раннего временного момента двух интервалов до (но не включая) самого позднего временного момента двух интервалов.
- Параметры:
PosInfInterval intervalИнтервал для создания диапазона вместе с этим интервалом.
- Примечание
- Нет перегрузки для
span, которая принимаетNegInfInterval, потому что интервал, простирающийся от минус бесконечности до плюс бесконечности, невозможен.
- Пример
assert(PosInfInterval!Date(Date(1996, 1, 2)).span( PosInfInterval!Date(Date(1990, 7, 6))) == PosInfInterval!Date(Date(1990, 7 , 6))); assert(PosInfInterval!Date(Date(1996, 1, 2)).span( PosInfInterval!Date(Date(1999, 1, 12))) == PosInfInterval!Date(Date(1996, 1 , 2))); - pure nothrow void shift(D)(D duration)
Constraints: if (__traits(compiles, begin + duration)); -
Сдвигает начало этого интервала вперед или назад во времени на заданную длительность (положительная длительность сдвигает интервал вперед; отрицательная длительность — назад). Эффективно выполняет
begin += duration.- Параметры:
D durationДлительность сдвига интервала.
- Пример
auto interval1 = PosInfInterval!Date(Date(1996, 1, 2)); auto interval2 = PosInfInterval!Date(Date(1996, 1, 2)); interval1.shift(dur!"days"(50)); assert(interval1 == PosInfInterval!Date(Date(1996, 2, 21))); interval2.shift(dur!"days"(-50)); assert(interval2 == PosInfInterval!Date(Date(1995, 11, 13)));
- void shift(T)(T years, T months = 0, AllowDayOverflow allowOverflow = AllowDayOverflow.yes)
Constraints: if (isIntegral!T); -
Сдвигает начало этого интервала вперед или назад во времени на заданное количество лет и/или месяцев (положительное число лет и месяцев сдвигает интервал вперед; отрицательное число — назад). Добавляет заданные годы и месяца к
begin. Эффективно вызываетadd!"years"()и затемadd!"months"()дляbeginс заданным количеством лет и месяцев.- Параметры:
T yearsКоличество лет сдвига интервала. T monthsКоличество месяцев сдвига интервала. AllowDayOverflow allowOverflowРазрешить ли переполнение дней в begin, вызывая при этом приращение месяца.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли этот интервал пустой или полученный интервал недействителен.
- Пример
auto interval1 = PosInfInterval!Date(Date(1996, 1, 2)); auto interval2 = PosInfInterval!Date(Date(1996, 1, 2)); interval1.shift(dur!"days"(50)); assert(interval1 == PosInfInterval!Date(Date(1996, 2, 21))); interval2.shift(dur!"days"(-50)); assert(interval2 == PosInfInterval!Date(Date(1995, 11, 13)));
- pure nothrow void expand(D)(D duration)
Constraints: if (__traits(compiles, begin + duration)); -
Расширяет интервал назад во времени. Эффективно выполняет
begin -= duration.- Параметры:
D durationДлительность расширения интервала.
- Пример
auto interval1 = PosInfInterval!Date(Date(1996, 1, 2)); auto interval2 = PosInfInterval!Date(Date(1996, 1, 2)); interval1.expand(dur!"days"(2)); assert(interval1 == PosInfInterval!Date(Date(1995, 12, 31))); interval2.expand(dur!"days"(-2)); assert(interval2 == PosInfInterval!Date(Date(1996, 1, 4)));
- void expand(T)(T years, T months = 0, AllowDayOverflow allowOverflow = AllowDayOverflow.yes)
Constraints: if (isIntegral!T); -
Расширяет интервал вперед и/или назад во времени. Эффективно вычитает заданное количество месяцев/лет из
begin.- Параметры:
T yearsКоличество лет расширения интервала. T monthsКоличество месяцев расширения интервала. AllowDayOverflow allowOverflowРазрешить ли переполнение дней в begin, вызывая при этом приращение месяца.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли этот интервал пустой или полученный интервал недействителен.
- Пример
auto interval1 = PosInfInterval!Date(Date(1996, 1, 2)); auto interval2 = PosInfInterval!Date(Date(1996, 1, 2)); interval1.expand(2); assert(interval1 == PosInfInterval!Date(Date(1994, 1, 2))); interval2.expand(-2); assert(interval2 == PosInfInterval!Date(Date(1998, 1, 2)));
- const PosInfIntervalRange!TP fwdRange(TP delegate(scope const TP) func, PopFirst popFirst = PopFirst.no);
-
-
Возвращает диапазон, который итерируется вперёд по интервалу, начиная с
begin, используя func для генерации каждого последующего момента времени.Диапазон
frontинтервалаbegin. func используется для генерации следующегоfrontпри вызовеpopFront. Если popFirstPopFirst.yes, тоpopFrontвызывается перед возвращением диапазона (так чтоfront— это момент времени, который func сгенерировал бы).
Если func когда-либо сгенерирует момент времени, меньший или равный текущемуfrontдиапазона, будет выброшено исключениеstd.datetime.date.DateTimeException.
В этом модуле есть вспомогательные функции, которые генерируют общие делегаты для передачи вfwdRange. Их документация начинается с «Функция генерации диапазона», чтобы их легко можно было найти.- Параметры:
TP delegate(scope const TP) funcФункция, используемая для генерации моментов времени диапазона в течение интервала. PopFirst popFirstНадо ли вызвать popFrontдля диапазона перед его возвращением.
- Исключения:
-
std.datetime.date.DateTimeException, если этот интервал пустой.
- Предупреждение
- func должна быть логически чистой. В идеале func должна быть указателем на функцию, но требование, чтобы func была чистой, слишком ограничивает. Чтобы иметь удобство использования функций, генерирующих функции для передачи в
fwdRange, func должна быть делегатом.
saveне сможет действительно сохранить состояние диапазона. Чтобы избежать таких ошибок, не передавайте вfwdRangeделегат, который не является логически чистым. Если func получает один и тот же момент времени при двух разных вызовах, она должна возвращать тот же результат в обоих случаях. Конечно, ни одна из функций в этом модуле не имеет этой проблемы, поэтому это актуально только для пользовательских делегатов.- Пример
auto interval = PosInfInterval!Date(Date(2010, 9, 1)); auto func = delegate (scope const Date date) //For iterating over even-numbered days. { if ((date.day & 1) == 0) return date + dur!"days"(2); return date + dur!"days"(1); }; auto range = interval.fwdRange(func); //An odd day. Using PopFirst.yes would have made this Date(2010, 9, 2). assert(range.front == Date(2010, 9, 1)); range.popFront(); assert(range.front == Date(2010, 9, 2)); range.popFront(); assert(range.front == Date(2010, 9, 4)); range.popFront(); assert(range.front == Date(2010, 9, 6)); range.popFront(); assert(range.front == Date(2010, 9, 8)); range.popFront(); assert(!range.empty); - const nothrow string toString();
-
Преобразует этот интервал в строку.
-
- struct NegInfInterval(TP);
-
Представляет интервал времени, начинающийся с минус бесконечности.
Любые диапазоны, которые итерируются по
NegInfInterval, являются бесконечными. Таким образом, основное назначение использованияNegInfInterval— создать бесконечный диапазон, начинающийся с минус бесконечности и заканчивающийся фиксированной конечной точкой. Итерируйте по нему в обратном порядке.
- pure nothrow this(scope const TP end);
-
- Параметры:
TP endТочка времени, которая завершает интервал.
- Пример
auto interval = PosInfInterval!Date(Date(1996, 1, 2));
- pure nothrow ref NegInfInterval opAssign(ref const NegInfInterval rhs);
-
- Параметры:
NegInfInterval rhsИнтервал, который необходимо назначить этому.
- pure nothrow ref NegInfInterval opAssign(NegInfInterval rhs);
-
- Параметры:
NegInfInterval rhsИнтервал, который необходимо назначить этому.
- const pure nothrow @property TP end();
-
Конечная точка интервала. Она исключена из интервала.
- Пример
assert(NegInfInterval!Date(Date(2012, 3, 1)).end == Date(2012, 3, 1));
- pure nothrow @property void end(TP timePoint);
-
Конечная точка интервала. Она исключена из интервала.
- Параметры:
TP timePointТочка времени, для которой необходимо установить конец.
- enum bool empty;
-
Указывает, равна ли длина интервала 0. Всегда возвращает false.
- Пример
assert(!NegInfInterval!Date(Date(1996, 1, 2)).empty);
- const pure nothrow bool contains(TP timePoint);
-
Указывает, входит ли заданная точка времени в этот интервал.
- Параметры:
TP timePointТочка времени, для которой необходимо проверить включение в этот интервал.
- Пример
assert(NegInfInterval!Date(Date(2012, 3, 1)).contains(Date(1994, 12, 24))); assert(NegInfInterval!Date(Date(2012, 3, 1)).contains(Date(2000, 1, 5))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).contains(Date(2012, 3, 1)));
- const pure bool contains(scope const Interval!TP interval);
-
Указывает, полностью ли данный интервал находится внутри этого интервала.
- Параметры:
Interval!TP intervalИнтервал, для которого необходимо проверить включение в этот интервал.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли заданный интервал пустой.
- Пример
assert(NegInfInterval!Date(Date(2012, 3, 1)).contains( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2)))); assert(NegInfInterval!Date(Date(2012, 3, 1)).contains( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17)))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).contains( Interval!Date(Date(1998, 2, 28), Date(2013, 5, 1)))); - const pure nothrow bool contains(scope const PosInfInterval!TP interval);
-
Указывает, полностью ли данный интервал находится внутри этого интервала.
Всегда возвращает false, так как интервал, начинающийся с минус бесконечности, никогда не может содержать интервал, идущий до плюс бесконечности.
- Параметры:
PosInfInterval!TP intervalИнтервал, для которого необходимо проверить включение в этот интервал.
- Пример
assert(!NegInfInterval!Date(Date(2012, 3, 1)).contains( PosInfInterval!Date(Date(1999, 5, 4)))); - const pure nothrow bool contains(scope const NegInfInterval interval);
-
Указывает, полностью ли данный интервал находится внутри этого интервала.
- Параметры:
NegInfInterval intervalИнтервал, для которого необходимо проверить включение в этот интервал.
- Пример
assert(NegInfInterval!Date(Date(2012, 3, 1)).contains( NegInfInterval!Date(Date(1996, 5, 4)))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).contains( NegInfInterval!Date(Date(2013, 7, 9)))); - const pure nothrow bool isBefore(scope const TP timePoint);
-
Указывает, находится ли этот интервал до заданной точки времени.
- Параметры:
TP timePointТочка времени, для которой необходимо проверить, находится ли этот интервал до нее.
- Пример
assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore(Date(1994, 12, 24))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore(Date(2000, 1, 5))); assert(NegInfInterval!Date(Date(2012, 3, 1)).isBefore(Date(2012, 3, 1)));
- const pure bool isBefore(scope const Interval!TP interval);
-
Указывает, находится ли этот интервал до данного интервала и не пересекается ли он с ним.
- Параметры:
Interval!TP intervalИнтервал, для проверки по отношению к этому интервалу.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли заданный интервал пустой
- Пример
assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2)))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17)))); assert(NegInfInterval!Date(Date(2012, 3, 1)).isBefore( Interval!Date(Date(2022, 10, 19), Date(2027, 6, 3)))); - const pure nothrow bool isBefore(scope const PosInfInterval!TP interval);
-
Указывает, находится ли этот интервал до данного интервала и не пересекается ли он с ним.
- Параметры:
PosInfInterval!TP intervalИнтервал, для проверки по отношению к этому интервалу.
- Пример
assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore( PosInfInterval!Date(Date(1999, 5, 4)))); assert(NegInfInterval!Date(Date(2012, 3, 1)).isBefore( PosInfInterval!Date(Date(2012, 3, 1)))); - const pure nothrow bool isBefore(scope const NegInfInterval interval);
-
Указывает, находится ли этот интервал до данного интервала и не пересекается ли он с ним.
Всегда возвращает false, так как интервал, начинающийся с минус бесконечности, никогда не может быть до другого интервала, начинающегося с минус бесконечности.
- Параметры:
NegInfInterval intervalИнтервал, для проверки по отношению к этому интервалу.
- Пример
assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore( NegInfInterval!Date(Date(1996, 5, 4)))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).isBefore( NegInfInterval!Date(Date(2013, 7, 9)))); - const pure nothrow bool isAfter(scope const TP timePoint);
-
Указывает, находится ли этот интервал после заданной точки времени.
Всегда возвращает false, так как интервал, начинающийся с минус бесконечности, никогда не может быть после любой точки времени.
- Параметры:
TP timePointТочка времени, для проверки, находится ли этот интервал после нее.
- Пример
assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(Date(1994, 12, 24))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(Date(2000, 1, 5))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter(Date(2012, 3, 1)));
- const pure bool isAfter(scope const Interval!TP interval);
-
Указывает, находится ли этот интервал после данного интервала и не пересекается ли он с ним.
Всегда возвращает false (если только заданный интервал не пустой), так как интервал, начинающийся с минус бесконечности, никогда не может быть после любого другого интервала.
- Параметры:
Interval!TP intervalИнтервал, для проверки по отношению к этому интервалу.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли заданный интервал пустой.
- Пример
assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2)))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17)))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter( Interval!Date(Date(2022, 10, 19), Date(2027, 6, 3)))); - const pure nothrow bool isAfter(scope const PosInfInterval!TP interval);
-
Указывает, находится ли этот интервал после данного интервала и не пересекается ли он с ним.
Всегда возвращает false, так как интервал, начинающийся с минус бесконечности, никогда не может быть после любого другого интервала.
- Параметры:
PosInfInterval!TP intervalИнтервал, для проверки по отношению к этому интервалу.
- Пример
assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter( PosInfInterval!Date(Date(1999, 5, 4)))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter( PosInfInterval!Date(Date(2012, 3, 1)))); - const pure nothrow bool isAfter(scope const NegInfInterval interval);
-
Указывает, находится ли этот интервал после данного интервала и не пересекается ли он с ним.
Всегда возвращает false, так как интервал, начинающийся с минус бесконечности, никогда не может быть после любого другого интервала.
- Параметры:
NegInfInterval intervalИнтервал, для проверки по отношению к этому интервалу.
- Пример
assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter( NegInfInterval!Date(Date(1996, 5, 4)))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAfter( NegInfInterval!Date(Date(2013, 7, 9)))); - const pure bool intersects(scope const Interval!TP interval);
-
Указывает, перекрывается ли данный интервал с этим интервалом.
- Параметры:
Interval!TP intervalИнтервал, для проверки пересечения с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли заданный интервал пустой.
- Пример
assert(NegInfInterval!Date(Date(2012, 3, 1)).intersects( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2)))); assert(NegInfInterval!Date(Date(2012, 3, 1)).intersects( Interval!Date(Date(1999, 1, 12), Date(2011, 9, 17)))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).intersects( Interval!Date(Date(2022, 10, 19), Date(2027, 6, 3)))); - const pure nothrow bool intersects(scope const PosInfInterval!TP interval);
-
Указывает, перекрывается ли данный интервал с этим интервалом.
- Параметры:
PosInfInterval!TP intervalИнтервал, для проверки пересечения с этим интервалом.
- Пример
assert(NegInfInterval!Date(Date(2012, 3, 1)).intersects( PosInfInterval!Date(Date(1999, 5, 4)))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).intersects( PosInfInterval!Date(Date(2012, 3, 1)))); - const pure nothrow bool intersects(scope const NegInfInterval!TP interval);
-
Указывает, перекрывается ли данный интервал с этим интервалом.
Всегда возвращает true, так как два интервала, начинающиеся с минус бесконечности, всегда перекрываются.
- Параметры:
NegInfInterval!TP intervalИнтервал, для проверки пересечения с этим интервалом.
- Пример
assert(NegInfInterval!Date(Date(2012, 3, 1)).intersects( NegInfInterval!Date(Date(1996, 5, 4)))); assert(NegInfInterval!Date(Date(2012, 3, 1)).intersects( NegInfInterval!Date(Date(2013, 7, 9)))); - const Interval!TP intersection(scope const Interval!TP interval);
-
Возвращает пересечение двух интервалов
- Параметры:
Interval!TP intervalИнтервал, с которым необходимо найти пересечение.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли интервалы не пересекаются или если заданный интервал пустой.
- Пример
assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) == Interval!Date(Date(1990, 7 , 6), Date(2000, 8, 2))); assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection( Interval!Date(Date(1999, 1, 12), Date(2015, 9, 2))) == Interval!Date(Date(1999, 1 , 12), Date(2012, 3, 1))); - const Interval!TP intersection(scope const PosInfInterval!TP interval);
-
Возвращает пересечение двух интервалов
- Параметры:
PosInfInterval!TP intervalИнтервал, с которым необходимо найти пересечение.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли интервалы не пересекаются.
- Пример
assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection( PosInfInterval!Date(Date(1990, 7, 6))) == Interval!Date(Date(1990, 7 , 6), Date(2012, 3, 1))); assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection( PosInfInterval!Date(Date(1999, 1, 12))) == Interval!Date(Date(1999, 1 , 12), Date(2012, 3, 1))); - const nothrow NegInfInterval intersection(scope const NegInfInterval interval);
-
Возвращает пересечение двух интервалов
- Параметры:
NegInfInterval intervalИнтервал для пересечения с этим интервалом.
- Пример
assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection( NegInfInterval!Date(Date(1999, 7, 6))) == NegInfInterval!Date(Date(1999, 7 , 6))); assert(NegInfInterval!Date(Date(2012, 3, 1)).intersection( NegInfInterval!Date(Date(2013, 1, 12))) == NegInfInterval!Date(Date(2012, 3 , 1))); - const pure bool isAdjacent(scope const Interval!TP interval);
-
Является ли данный интервал смежным с этим интервалом.
- Параметры:
Interval!TP intervalИнтервал, для проверки смежности с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeException, если заданный интервал пустой.
- Пример
assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2)))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent( Interval!Date(Date(1999, 1, 12), Date(2012, 3, 1)))); assert(NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent( Interval!Date(Date(2012, 3, 1), Date(2019, 2, 2)))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent( Interval!Date(Date(2022, 10, 19), Date(2027, 6, 3)))); - const pure nothrow bool isAdjacent(scope const PosInfInterval!TP interval);
-
Является ли данный интервал смежным с этим интервалом.
- Параметры:
PosInfInterval!TP intervalИнтервал, для проверки смежности с этим интервалом.
- Пример
assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent( PosInfInterval!Date(Date(1999, 5, 4)))); assert(NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent( PosInfInterval!Date(Date(2012, 3, 1)))); - const pure nothrow bool isAdjacent(scope const NegInfInterval interval);
-
Является ли данный интервал смежным с этим интервалом.
Всегда возвращает false, потому что два интервала, начинающиеся с минус бесконечности, никогда не могут быть смежными.
- Параметры:
NegInfInterval intervalИнтервал, для проверки смежности с этим интервалом.
- Пример
assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent( NegInfInterval!Date(Date(1996, 5, 4)))); assert(!NegInfInterval!Date(Date(2012, 3, 1)).isAdjacent( NegInfInterval!Date(Date(2012, 3, 1)))); - const NegInfInterval merge(scope const Interval!TP interval);
-
Возвращает объединение двух интервалов
- Параметры:
Interval!TP intervalИнтервал для объединения с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли два интервала не пересекаются и не являются смежными или если заданный интервал пустой.
- Примечание
- Нет перегрузки для
merge, которая принимаетPosInfInterval, потому что интервал от минус бесконечности до плюс бесконечности невозможен.
- Пример
assert(NegInfInterval!Date(Date(2012, 3, 1)).merge( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) == NegInfInterval!Date(Date(2012, 3 , 1))); assert(NegInfInterval!Date(Date(2012, 3, 1)).merge( Interval!Date(Date(1999, 1, 12), Date(2015, 9, 2))) == NegInfInterval!Date(Date(2015, 9 , 2))); - const pure nothrow NegInfInterval merge(scope const NegInfInterval interval);
-
Возвращает объединение двух интервалов
- Параметры:
NegInfInterval intervalИнтервал для объединения с этим интервалом.
- Примечание
- Нет перегрузки для
merge, которая принимаетPosInfInterval, потому что интервал от минус бесконечности до плюс бесконечности невозможен.
- Пример
assert(NegInfInterval!Date(Date(2012, 3, 1)).merge( NegInfInterval!Date(Date(1999, 7, 6))) == NegInfInterval!Date(Date(2012, 3 , 1))); assert(NegInfInterval!Date(Date(2012, 3, 1)).merge( NegInfInterval!Date(Date(2013, 1, 12))) == NegInfInterval!Date(Date(2013, 1 , 12))); - const pure NegInfInterval span(scope const Interval!TP interval);
-
Возвращает интервал, охватывающий с самого раннего временного момента двух интервалов до (но не включая) самого позднего временного момента двух интервалов.
- Параметры:
Interval!TP intervalИнтервал для создания интервала покрытия вместе с этим интервалом.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли заданный интервал пустой.
- Примечание
- Нет перегрузки для
span, которая принимаетPosInfInterval, потому что интервал от минус бесконечности до плюс бесконечности невозможен.
- Пример
assert(NegInfInterval!Date(Date(2012, 3, 1)).span( Interval!Date(Date(1990, 7, 6), Date(2000, 8, 2))) == NegInfInterval!Date(Date(2012, 3 , 1))); assert(NegInfInterval!Date(Date(2012, 3, 1)).span( Interval!Date(Date(1999, 1, 12), Date(2015, 9, 2))) == NegInfInterval!Date(Date(2015, 9 , 2))); assert(NegInfInterval!Date(Date(1600, 1, 7)).span( Interval!Date(Date(2012, 3, 11), Date(2017, 7, 1))) == NegInfInterval!Date(Date(2017, 7 , 1))); - const pure nothrow NegInfInterval span(scope const NegInfInterval interval);
-
Возвращает интервал, охватывающий с самого раннего временного момента двух интервалов до (но не включая) самого позднего временного момента двух интервалов.
- Параметры:
NegInfInterval intervalИнтервал для создания интервала покрытия вместе с этим интервалом.
- Примечание
- Нет перегрузки для
span, которая принимаетPosInfInterval, потому что интервал от минус бесконечности до плюс бесконечности невозможен.
- Пример
assert(NegInfInterval!Date(Date(2012, 3, 1)).span( NegInfInterval!Date(Date(1999, 7, 6))) == NegInfInterval!Date(Date(2012, 3 , 1))); assert(NegInfInterval!Date(Date(2012, 3, 1)).span( NegInfInterval!Date(Date(2013, 1, 12))) == NegInfInterval!Date(Date(2013, 1 , 12))); - pure nothrow void shift(D)(D duration)
Constraints: if (__traits(compiles, end + duration)); -
Перемещает конец этого интервала вперёд или назад во времени на заданную продолжительность (положительная продолжительность сдвигает интервал вперёд, отрицательная – назад). Эффективно, это
end.- Параметры:
D durationПродолжительность сдвига интервала.
- Пример
auto interval1 = NegInfInterval!Date(Date(2012, 4, 5)); auto interval2 = NegInfInterval!Date(Date(2012, 4, 5)); interval1.shift(dur!"days"(50)); assert(interval1 == NegInfInterval!Date(Date(2012, 5, 25))); interval2.shift(dur!"days"(-50)); assert(interval2 == NegInfInterval!Date( Date(2012, 2, 15)));
- void shift(T)(T years, T months = 0, AllowDayOverflow allowOverflow = AllowDayOverflow.yes)
Constraints: if (isIntegral!T); -
Перемещает конец этого интервала вперёд или назад во времени на заданное количество лет и/или месяцев (положительное количество лет и месяцев сдвигает интервал вперёд, отрицательное – назад). Добавляет заданное количество лет и месяцев к концу. Эффективно вызывает
add!"years"()и затемadd!"months"()для конца с заданным количеством лет и месяцев.- Параметры:
T yearsКоличество лет сдвига интервала. T monthsКоличество месяцев сдвига интервала. AllowDayOverflow allowOverflowРазрешить ли переполнение дней в end, вызывая увеличение месяца.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли пусто равно true или полученный интервал будет недействительным.
- Пример
auto interval1 = NegInfInterval!Date(Date(2012, 3, 1)); auto interval2 = NegInfInterval!Date(Date(2012, 3, 1)); interval1.shift(2); assert(interval1 == NegInfInterval!Date(Date(2014, 3, 1))); interval2.shift(-2); assert(interval2 == NegInfInterval!Date(Date(2010, 3, 1)));
- pure nothrow void expand(D)(D duration)
Constraints: if (__traits(compiles, end + duration)); -
Расширяет интервал вперёд во времени. Эффективно
end += duration.- Параметры:
D durationПродолжительность расширения интервала.
- Пример
auto interval1 = NegInfInterval!Date(Date(2012, 3, 1)); auto interval2 = NegInfInterval!Date(Date(2012, 3, 1)); interval1.expand(dur!"days"(2)); assert(interval1 == NegInfInterval!Date(Date(2012, 3, 3))); interval2.expand(dur!"days"(-2)); assert(interval2 == NegInfInterval!Date(Date(2012, 2, 28)));
- void expand(T)(T years, T months = 0, AllowDayOverflow allowOverflow = AllowDayOverflow.yes)
Constraints: if (isIntegral!T); -
Расширяет интервал вперёд и/или назад во времени. Эффективно добавляет заданное количество месяцев/лет к концу.
- Параметры:
T yearsКоличество лет расширения интервала. T monthsКоличество месяцев расширения интервала. AllowDayOverflow allowOverflowРазрешить ли переполнение дней в end, вызывая увеличение месяца.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли пусто равно true или полученный интервал будет недействительным.
- Пример
auto interval1 = NegInfInterval!Date(Date(2012, 3, 1)); auto interval2 = NegInfInterval!Date(Date(2012, 3, 1)); interval1.expand(2); assert(interval1 == NegInfInterval!Date(Date(2014, 3, 1))); interval2.expand(-2); assert(interval2 == NegInfInterval!Date(Date(2010, 3, 1)));
- const NegInfIntervalRange!TP bwdRange(TP delegate(scope const TP) func, PopFirst popFirst = PopFirst.no);
-
Возвращает диапазон, который итерируется назад по интервалу, начиная с
end, используя func для генерации каждого последующего временного момента.Диапазон
frontэто конец интервала. func используется для генерации следующегоfrontкогдаpopFrontвызывается. Если popFirst равноPopFirst.yes, тоpopFrontвызывается перед возвращением диапазона (так, чтоfrontэто временная точка, которую func сгенерирует).
Если func когда-либо сгенерирует временную точку, большую или равную текущемуfrontдиапазона, то будет брошено исключениеstd.datetime.date.DateTimeException.
В этом модуле есть вспомогательные функции, которые генерируют общие делегаты для передачи вbwdRange. Их документация начинается с "Функция генерации диапазона" для их лёгкого поиска.- Параметры:
TP delegate(scope const TP) funcФункция, используемая для генерации временных точек диапазона по интервалу. PopFirst popFirstВызывать ли popFrontв диапазоне перед его возвращением.
- Исключения:
-
std.datetime.date.DateTimeExceptionесли этот интервал пуст.
- Предупреждение
- func должна быть логически чистой. В идеале, func должна быть указателем на функцию, но принуждение func к чистоте слишком ограничительно, и для обеспечения удобства использования функций, генерирующих функции для передачи в
fwdRange, func должна быть делегатом.
saveне смог действительно сохранить состояние диапазона. Чтобы избежать таких ошибок, не передавайте делегат, который не является логически чистым вfwdRange. Если func получает ту же временную точку с двумя разными вызовами, она должна возвращать тот же результат в обоих случаях. Конечно, ни одна из функций в этом модуле не имеет этой проблемы, поэтому это актуально только для пользовательских делегатов.- Пример
auto interval = NegInfInterval!Date(Date(2010, 9, 9)); auto func = delegate (scope const Date date) //For iterating over even-numbered days. { if ((date.day & 1) == 0) return date - dur!"days"(2); return date - dur!"days"(1); }; auto range = interval.bwdRange(func); assert(range.front == Date(2010, 9, 9)); //An odd day. Using PopFirst.yes would have made this Date(2010, 9, 8). range.popFront(); assert(range.front == Date(2010, 9, 8)); range.popFront(); assert(range.front == Date(2010, 9, 6)); range.popFront(); assert(range.front == Date(2010, 9, 4)); range.popFront(); assert(range.front == Date(2010, 9, 2)); range.popFront(); assert(!range.empty); - const nothrow string toString();
-
Преобразует этот интервал в строку.
-
- nothrow TP delegate(scope const TP) everyDayOfWeek(TP, Direction dir = Direction.fwd)(DayOfWeek dayOfWeek)
Constraints: if (isTimePoint!TP && (dir == Direction.fwd || dir == Direction.bwd) && __traits(hasMember, TP, "dayOfWeek") && !__traits(isStaticFunction, TP.dayOfWeek) && is(typeof(TP.dayOfWeek) == DayOfWeek)); -
Функция генерации диапазона.
Возвращает делегат, который возвращает следующую точку времени с заданным
DayOfWeekв диапазоне.
Использование этого делегата позволяет итерироваться по последовательным точкам времени, которые все имеют одинаковый день недели. Например, передачаDayOfWeek.monвeveryDayOfWeekприведет к делегату, который можно использовать для итерации по всем понедельникам в диапазоне.- Параметры:
dir Направление итерации. Если возвращаемое значение передается в fwdRange, используйтеDirection.fwd. Если передается вbwdRange, используйтеDirection.bwd.DayOfWeek dayOfWeekДень недели, который будет у каждой точки времени в диапазоне.
- Примеры:
-
import std.datetime.date : Date, DayOfWeek; auto interval = Interval!Date(Date(2010, 9, 2), Date(2010, 9, 27)); auto func = everyDayOfWeek!Date(DayOfWeek.mon); auto range = interval.fwdRange(func); // A Thursday. Using PopFirst.yes would have made this Date(2010, 9, 6). writeln(range.front); // Date(2010, 9, 2) range.popFront(); writeln(range.front); // Date(2010, 9, 6) range.popFront(); writeln(range.front); // Date(2010, 9, 13) range.popFront(); writeln(range.front); // Date(2010, 9, 20) range.popFront(); assert(range.empty);
- TP delegate(scope const TP) everyMonth(TP, Direction dir = Direction.fwd)(int month)
Constraints: if (isTimePoint!TP && (dir == Direction.fwd || dir == Direction.bwd) && __traits(hasMember, TP, "month") && !__traits(isStaticFunction, TP.month) && is(typeof(TP.month) == Month)); -
Функция генерации диапазона.
Возвращает делегат, который возвращает следующую точку времени с заданным месяцем, который будет достигнут путем добавления месяцев к заданной точке времени.
Таким образом, использование этого делегата позволяет итерироваться по последовательным точкам времени, которые находятся в одном и том же месяце, но в разных годах. Например, итерируйтесь по каждому последующему 25 декабря в интервале, начав с даты, у которой 25-е число как день и передавMonth.decвeveryMonthдля создания делегата.
Поскольку не имеет смысла итерироваться по определенному месяцу и получать некоторые точки времени в следующем месяце или через два года после предыдущей точки времени,AllowDayOverflow.noвсегда используется при расчете следующей точки времени.- Параметры:
dir Направление итерации. Если возвращаемое значение передается в fwdRange, используйтеDirection.fwd. Если передается вbwdRange, используйтеDirection.bwd.int monthМесяц, в котором будет находиться каждая точка времени в диапазоне (январь — 1).
- Примеры:
-
import std.datetime.date : Date, Month; auto interval = Interval!Date(Date(2000, 1, 30), Date(2004, 8, 5)); auto func = everyMonth!Date(Month.feb); auto range = interval.fwdRange(func); // Using PopFirst.yes would have made this Date(2010, 2, 29). writeln(range.front); // Date(2000, 1, 30) range.popFront(); writeln(range.front); // Date(2000, 2, 29) range.popFront(); writeln(range.front); // Date(2001, 2, 28) range.popFront(); writeln(range.front); // Date(2002, 2, 28) range.popFront(); writeln(range.front); // Date(2003, 2, 28) range.popFront(); writeln(range.front); // Date(2004, 2, 28) range.popFront(); assert(range.empty);
- nothrow TP delegate(scope const TP) everyDuration(TP, Direction dir = Direction.fwd, D)(D duration)
Constraints: if (isTimePoint!TP && __traits(compiles, TP.init + duration) && (dir == Direction.fwd || dir == Direction.bwd)); -
Функция генерации диапазона.
Возвращает делегат, который возвращает следующую точку времени, которая на заданную длительность позже.
Использование этого делегата позволяет итерироваться по последовательным точкам времени, которые разделены заданной длительностью. Например, передачаdur!"days"(3)вeveryDurationприведет к делегату, который можно использовать для итерации по диапазону дней, каждый из которых разделен тремя днями.- Параметры:
dir Направление итерации. Если возвращаемое значение передается в fwdRange, используйтеDirection.fwd. Если передается вbwdRange, используйтеDirection.bwd.D durationДлительность, которая разделяет каждую последующую точку времени в диапазоне.
- Примеры:
-
import core.time : dur; import std.datetime.date : Date; auto interval = Interval!Date(Date(2010, 9, 2), Date(2010, 9, 27)); auto func = everyDuration!Date(dur!"days"(8)); auto range = interval.fwdRange(func); // Using PopFirst.yes would have made this Date(2010, 9, 10). writeln(range.front); // Date(2010, 9, 2) range.popFront(); writeln(range.front); // Date(2010, 9, 10) range.popFront(); writeln(range.front); // Date(2010, 9, 18) range.popFront(); writeln(range.front); // Date(2010, 9, 26) range.popFront(); assert(range.empty);
- nothrow TP delegate(scope const TP) everyDuration(TP, Direction dir = Direction.fwd, D)(int years, int months = 0, AllowDayOverflow allowOverflow = AllowDayOverflow.yes, D duration = dur!"days"(0))
Constraints: if (isTimePoint!TP && __traits(compiles, TP.init + duration) && __traits(compiles, TP.init.add!"years"(years)) && __traits(compiles, TP.init.add!"months"(months)) && (dir == Direction.fwd || dir == Direction.bwd)); -
Функция генерации диапазона.
Возвращает делегат, который возвращает следующую точку времени, которая на заданное количество лет, месяцев и длительность позже.
Разница между этим вариантомeveryDurationи вариантом, который принимает толькоcore.time.Duration, заключается в том, что этот также принимает количество лет и месяцев (наряду сAllowDayOverflowдля указания, должно ли добавление лет и месяцев допускать переполнение дней).
Обратите внимание, что при итерации вперед вызываетсяadd!"years"()для заданной точки времени, затемadd!"months"(), и, наконец, к ней добавляется длительность. Однако при итерации назад сначала добавляется длительность, затем вызываетсяadd!"months"(), и, наконец, вызываетсяadd!"years"(). Таким образом, при обратном проходе генерируются близкие к тем же точкам времени, что и при итерации вперед, но поскольку добавление лет и месяцев не полностью обратимо (из-за возможного переполнения дней, независимо от того, используетсяAllowDayOverflow.yesилиAllowDayOverflow.no), нельзя гарантировать, что при обратном проходе будут получены те же точки времени, что и при итерации вперед (даже если предположить, что конец диапазона — это точка времени, которая будет возвращена делегатом при итерации вперед отbegin).- Параметры:
dir Направление итерации. Если возвращаемое значение передается в fwdRange, используйтеDirection.fwd. Если передается вbwdRange, используйтеDirection.bwd.int yearsКоличество лет для добавления к точке времени, переданной делегату. int monthsКоличество месяцев для добавления к точке времени, переданной делегату. AllowDayOverflow allowOverflowРазрешить ли переполнение дней при beginиend, вызывая увеличение их месяца.D durationДлительность для добавления к точке времени, переданной делегату.
- Примеры:
-
import core.time : dur; import std.datetime.date : AllowDayOverflow, Date; auto interval = Interval!Date(Date(2010, 9, 2), Date(2025, 9, 27)); auto func = everyDuration!Date(4, 1, AllowDayOverflow.yes, dur!"days"(2)); auto range = interval.fwdRange(func); // Using PopFirst.yes would have made this Date(2014, 10, 12). writeln(range.front); // Date(2010, 9, 2) range.popFront(); writeln(range.front); // Date(2014, 10, 4) range.popFront(); writeln(range.front); // Date(2018, 11, 6) range.popFront(); writeln(range.front); // Date(2022, 12, 8) range.popFront(); assert(range.empty);
- struct IntervalRange(TP, Direction dir) if (isTimePoint!TP && (dir != Direction.both));
-
Диапазон значений над
Interval.IntervalRangeсоздаётся только с помощьюInterval. Однако при создании ему передаётся функцияfunc, которая используется для генерации точек времени, по которым происходит итерация.funcпринимает точку времени и возвращает точку времени того же типа. Например, чтобы перебрать все дни в интервалеInterval!Date, передайте функцию вfwdRangeInterval, где эта функция принимаетstd.datetime.date.Dateи возвращаетstd.datetime.date.Date, который на один день позже. Затем эта функция будет использоватьсяIntervalRangeвpopFrontдля итерации поstd.datetime.date.Dateв интервале.
Еслиdir == Direction.fwd, то диапазон итерируется вперёд во времени, а еслиdir == Direction.bwd, то он итерируется назад во времени. Итак, еслиdir == Direction.fwd, тоfront == interval.begin, а еслиdir == Direction.bwd, тоfront == interval.end.funcдолжна генерировать точку времени, идущую в правильном направлении итерации, иначе будет брошено исключениеstd.datetime.date.DateTimeException. Таким образом, для итерации вперёд во времени точка времени, которуюfuncгенерирует, должна быть позже, чем та, которая ей была передана. Если она либо идентична, либо раньше, то будет брошено исключениеstd.datetime.date.DateTimeException. Для итерации назад, сгенерированная точка времени должна быть раньше переданной точки времени.
Если сгенерированная точка времени когда-либо пересечёт край диапазона в правильном направлении, то будет использоваться край этого диапазона. Итак, если итерировать вперёд, и сгенерированная точка времени находится за интерваломend, тоfrontстановитсяend. Если итерировать назад, и сгенерированная точка времени находится передbegin, тоfrontстановитсяbegin. В любом случае диапазон станет пустым.
Также обратите внимание, что, хотя обычно начало интервала включено в него, а его конец исключён, еслиdir == Direction.bwd, тоbeginобрабатывается как исключённое, аendобрабатывается как включённое. Это позволяет получить одинаковое поведение в обоих направлениях. Это работает, потому что ни одна из функцийInterval, которые заботятся о том, включено или исключеноbeginилиend, никогда не вызываетсяIntervalRange.intervalвозвращает обычный интервал, независимо от того,dir == Direction.fwdилиdir == Direction.bwd, так что любые функцииInterval, которые вызываются у него, и которые заботятся о том, включены лиbeginилиend, будут обрабатыватьbeginкак включённое, аendкак исключённое.- pure nothrow ref IntervalRange opAssign(ref IntervalRange rhs);
pure nothrow ref IntervalRange opAssign(IntervalRange rhs); -
- Parameters:
IntervalRange rhsПрисваиваемый IntervalRangeинтервал.
- const pure nothrow @property bool empty();
-
Является ли этот
IntervalRangeпустым. - const pure @property TP front();
-
Первая точка времени в диапазоне.
- Throws:
-
std.datetime.date.DateTimeExceptionесли диапазон пуст.
- void popFront();
-
Удаляет
frontиз диапазона, используяfuncдля генерации следующей точки времени в диапазоне. Если сгенерированная точка времени выходит за пределы диапазона, тоfrontустанавливается на этот край, и диапазон становится пустым. Итак, если итерировать вперёд, и сгенерированная точка времени больше, чем край интервалаend, тоfrontустанавливается наend. Если итерировать назад, и сгенерированная точка времени меньше, чем край интервалаbegin, тоfrontустанавливается наbegin.- Throws:
-
std.datetime.date.DateTimeExceptionесли диапазон пуст или если сгенерированная точка времени находится в неправильном направлении (т.е. если итерировать вперёд и сгенерированная точка времени раньшеfront, или если итерировать назад и сгенерированная точка времени послеfront).
- pure nothrow @property IntervalRange save();
-
Возвращает копию
this. - const pure nothrow @property Interval!TP interval();
-
Интервал, который в данный момент покрывает этот
IntervalRange. - pure nothrow @property TP delegate(scope const TP) func();
-
Функция, используемая для генерации следующей точки времени в диапазоне.
- const pure nothrow @property Direction direction();
-
Направление итерации этого диапазона.
- pure nothrow ref IntervalRange opAssign(ref IntervalRange rhs);
- struct PosInfIntervalRange(TP) if (isTimePoint!TP);
-
Диапазон значений над
PosInfInterval. Это бесконечный диапазон.PosInfIntervalRangeсоздаётся только с помощьюPosInfInterval. Однако при создании ему передаётся функцияfunc, которая используется для генерации точек времени, по которым происходит итерация.funcпринимает точку времени и возвращает точку времени того же типа. Например, чтобы перебрать все дни в интервалеPosInfInterval!Date, передайте функцию вfwdRangePosInfInterval, где эта функция принимаетstd.datetime.date.Dateи возвращаетstd.datetime.date.Date, который на один день позже. Затем эта функция будет использоватьсяPosInfIntervalRangeвpopFrontдля итерации поstd.datetime.date.Dateв интервале - хотя, очевидно, поскольку диапазон бесконечен, для него следует использовать функцию типаstd.range.takeвместо итерации по всем датам.
Поскольку интервал идёт до положительной бесконечности, диапазон всегда итерируется вперёд, никогда назад.funcдолжна генерировать точку времени в нужном направлении итерации, иначе будет брошено исключениеstd.datetime.date.DateTimeException. Таким образом, точки времени, которыеfuncгенерирует, должны быть позже, чем та, которая ей была передана. Если они либо идентичны, либо раньше, то будет брошено исключениеstd.datetime.date.DateTimeException.- pure nothrow ref PosInfIntervalRange opAssign(ref PosInfIntervalRange rhs);
pure nothrow ref PosInfIntervalRange opAssign(PosInfIntervalRange rhs); -
- Parameters:
PosInfIntervalRange rhsПрисваиваемый PosInfIntervalRangeинтервал.
- enum bool empty;
-
Этот диапазон бесконечен, поэтому он никогда не пустой.
- const pure nothrow @property TP front();
-
Первая точка времени в диапазоне.
- void popFront();
-
Удаляет
frontиз диапазона, используяfuncдля генерации следующей точки времени в диапазоне.- Throws:
-
std.datetime.date.DateTimeExceptionесли сгенерированная точка времени меньшеfront.
- pure nothrow @property PosInfIntervalRange save();
-
Возвращает копию
this. - const pure nothrow @property PosInfInterval!TP interval();
-
Интервал, который в данный момент покрывает этот диапазон.
- pure nothrow @property TP delegate(scope const TP) func();
-
Функция, используемая для генерации следующей точки времени в диапазоне.
- pure nothrow ref PosInfIntervalRange opAssign(ref PosInfIntervalRange rhs);
- struct NegInfIntervalRange(TP) if (isTimePoint!TP);
-
Диапазон над
NegInfInterval. Это бесконечный диапазон.NegInfIntervalRangeвсегда создаётсяNegInfInterval. Однако при создании ему передаётся функцияfunc, которая используется для генерации временных точек, по которым происходит итерация.funcпринимает временную точку и возвращает временную точку того же типа. Например, чтобы перебрать все дни в интервалеNegInfInterval!Date, передайте функцию вNegInfInterval'sbwdRange, где эта функция принимаетstd.datetime.date.Dateи возвращаетstd.datetime.date.Date, который на один день раньше. Затем эта функция будет использоватьсяNegInfIntervalRange'spopFrontдля перебораstd.datetime.date.Dateв интервале — хотя, очевидно, поскольку диапазон бесконечен, следует использовать функцию, такую какstd.range.take, а не перебирать все даты.
Поскольку интервал уходит в отрицательную бесконечность, диапазон всегда перебирается в обратном порядке, никогда не вперёд.funcдолжен генерировать временную точку в нужном направлении итерации, в противном случае будет выброшено исключениеstd.datetime.date.DateTimeException. Таким образом, временные точки, которыеfuncгенерирует, должны быть раньше, чем та, которая ему передана. Если они одинаковы или позже, то будет выброшено исключениеstd.datetime.date.DateTimeException.
Также обратите внимание, что, хотя обычно начало интервала исключается из него,NegInfIntervalRangeрассматривает его как включённое. Это позволяет получить такое же поведение, как и сPosInfIntervalRange. Это работает, потому что ни одна из функцийNegInfIntervalне учитывает, включён лиendили исключён, они никогда не вызываютсяNegInfIntervalRange.intervalвозвращает нормальный интервал, поэтому все функцииNegInfInterval, вызываемые у него, которые учитывают, включено лиendили исключено, будут рассматриватьendкак исключённое.- pure nothrow ref NegInfIntervalRange opAssign(ref NegInfIntervalRange rhs);
pure nothrow ref NegInfIntervalRange opAssign(NegInfIntervalRange rhs); -
- Parameters:
NegInfIntervalRange rhsИнтервал, который нужно назначить этому.
- enum bool empty;
-
Это бесконечный диапазон, поэтому он никогда не пуст.
- const pure nothrow @property TP front();
-
Первая временная точка в диапазоне.
- void popFront();
-
Удаляет
frontиз диапазона, используяfuncдля генерации следующей временной точки в диапазоне.- Throws:
-
std.datetime.date.DateTimeException, если сгенерированная временная точка большеfront.
- pure nothrow @property NegInfIntervalRange save();
-
Возвращает копию
this. - const pure nothrow @property NegInfInterval!TP interval();
-
Интервал, который в данный момент покрывает этот диапазон.
- pure nothrow @property TP delegate(scope const TP) func();
-
Функция, используемая для генерации следующей временной точки в диапазоне.
- pure nothrow ref NegInfIntervalRange opAssign(ref NegInfIntervalRange rhs);
© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_datetime_interval.html