Spec-Zone.ru › Julia 1.0

Даты

Модуль Dates предоставляет два типа для работы с датами: Date и DateTime, представляющие точность в днях и миллисекундах соответственно; оба являются подтипами абстрактного TimeType. Мотивация для различных типов проста: некоторые операции значительно проще, как с точки зрения кода, так и с точки зрения ментального моделирования, когда нет необходимости учитывать сложности большей точности. Например, так как тип Date разрешается только с точностью до даты (т.е. без часов, минут или секунд), обычные соображения по часовым поясам, переходу на летнее время и високосным секундам не нужны и не учитываются.

Оба типа Date и DateTime представляют собой в основном неизменяемые обёртки Int64. Единственное поле instant любого из этих типов на самом деле является типом UTInstant{P}, который представляет непрерывно возрастающую машинную временную шкалу, основанную на UT-секунде [1]. Тип DateTime не учитывает часовые пояса (неявный, в терминологии Python), аналогично LocalDateTime в Java 8. Дополнительные возможности работы с часовыми поясами можно добавить с помощью пакета TimeZones.jl, который компилирует базу данных часовых поясов IANA. Оба типа Date и DateTime основаны на стандарте ISO 8601, который следует пролептическому григорианскому календарю. Отметим, что стандарт ISO 8601 конкретен в отношении дат до нашей эры. В общем случае последний день до нашей эры (1-12-31 до н.э.) следовал за 1-1-1 н.э., поэтому нулевого года не существует. Однако стандарт ISO гласит, что 1 до н.э. — это нулевой год, поэтому 0000-12-31 — это день до 0001-01-01, а год -0001 (да, минус один для года) — 2 до н.э., год -0002 — 3 до н.э. и т.д.

[1]

Понятие UT-секунды на самом деле довольно фундаментально. Существуют в основном два различных понятия времени, которые обычно принимаются во внимание: одно основано на физическом вращении Земли (одно полное вращение = 1 день), другое — на SI-секунде (фиксированное, постоянное значение). Они радикально отличаются! Подумайте об этом, «UT-секунда», определённая относительно вращения Земли, может иметь разную абсолютную длину в зависимости от дня! В любом случае, тот факт, что Date и DateTime основаны на UT-секундах, является упрощающим, но честным предположением, чтобы избежать сложностей с високочными секундами и всеми их нюансами. Эта основа времени формально называется UT или UT1. Основание типов на UT-секунде в основном означает, что каждая минута содержит 60 секунд, а каждый день — 24 часа, что приводит к более естественным расчётам при работе с календарными датами.

Конструкторы

Типы Date и DateTime можно создавать с использованием целочисленных или Period типов, путём парсинга или с помощью корректоров (подробнее об этом позже):

julia> DateTime(2013)
2013-01-01T00:00:00

julia> DateTime(2013,7)
2013-07-01T00:00:00

julia> DateTime(2013,7,1)
2013-07-01T00:00:00

julia> DateTime(2013,7,1,12)
2013-07-01T12:00:00

julia> DateTime(2013,7,1,12,30)
2013-07-01T12:30:00

julia> DateTime(2013,7,1,12,30,59)
2013-07-01T12:30:59

julia> DateTime(2013,7,1,12,30,59,1)
2013-07-01T12:30:59.001

julia> Date(2013)
2013-01-01

julia> Date(2013,7)
2013-07-01

julia> Date(2013,7,1)
2013-07-01

julia> Date(Dates.Year(2013),Dates.Month(7),Dates.Day(1))
2013-07-01

julia> Date(Dates.Month(7),Dates.Year(2013))
2013-07-01

Парсинг Date или DateTime осуществляется с использованием строк формата. Строки формата работают по принципу определения «разграниченных» или «фиксированных» «слотов», содержащих период для разбора, а затем передают текст для разбора и строку формата конструктору Date или DateTime в формате Date("2015-01-01","y-m-d") или DateTime("20150101","yyyymmdd").

Разграниченные слоты отмечаются указанием разделителя, который парсер должен ожидать между двумя последующими периодами; например, "y-m-d" позволяет парсеру понять, что между первым и вторым слотами в строке даты, такой как "2014-07-16", он должен найти символ - . Символы y, m, и d позволяют парсеру определить, какие периоды нужно анализировать в каждом слоте.

Фиксированные слоты задаются путём повторения символа периода столько раз, сколько соответствует ширине, без разделителя между символами. Например, "yyyymmdd" соответствует строке даты, подобной "20140716". Парсер различает фиксированный слот по отсутствию разделителя, отмечая переход "yyyymm" от одного символа периода к другому.

Поддержка парсинга месяцев в текстовой форме также поддерживается символами u и U для сокращённых и полных названий месяцев соответственно. По умолчанию поддерживаются только английские названия месяцев, поэтому u соответствует «Янв», «Фев», «Мар» и т.д. А U соответствует «Январь», «Февраль», «Март» и т.д. Аналогично другим функциям сопоставления «имя»=>«значение» dayname и monthname, пользовательские языковые локали можно загрузить, передав отображение locale=>Dict{String,Int} в словари MONTHTOVALUEABBR и MONTHTOVALUE для сокращённых и полных названий месяцев соответственно.

Замечание по производительности парсинга: использование функции Date(date_string,format_string) допустимо, если она вызывается несколько раз. Однако, если необходимо проанализировать множество строк дат с похожим форматом, гораздо эффективнее предварительно создать Dates.DateFormat и передать его вместо исходной строки формата.

julia> df = DateFormat("y-m-d");

julia> dt = Date("2015-01-01",df)
2015-01-01

julia> dt2 = Date("2015-01-02",df)
2015-01-02

Также можно использовать макрос строки dateformat"". Этот макрос создаёт объект DateFormat один раз при развёртывании макроса и использует тот же объект DateFormat даже если фрагмент кода выполняется несколько раз.

julia> for i = 1:10^5
           Date("2015-01-01", dateformat"y-m-d")
       end

Полный набор тестов и примеров парсинга и форматирования доступен в stdlib/Dates/test/io.jl.

Длительности/Сравнения

Вычисление временного интервала между двумя датами Date или DateTime является простым, учитывая их внутреннее представление как UTInstant{Day} и UTInstant{Millisecond} соответственно. Разница между Date возвращается в виде числа Day, а DateTime — в виде числа Millisecond. Аналогично, сравнение TimeType сводится к простому сравнению внутренних машинных моментов (что, в свою очередь, сравнивает внутренние значения Int64).

julia> dt = Date(2012,2,29)
2012-02-29

julia> dt2 = Date(2000,2,1)
2000-02-01

julia> dump(dt)
Date
  instant: Dates.UTInstant{Day}
    periods: Day
      value: Int64 734562

julia> dump(dt2)
Date
  instant: Dates.UTInstant{Day}
    periods: Day
      value: Int64 730151

julia> dt > dt2
true

julia> dt != dt2
true

julia> dt + dt2
ERROR: MethodError: no method matching +(::Date, ::Date)
[...]

julia> dt * dt2
ERROR: MethodError: no method matching *(::Date, ::Date)
[...]

julia> dt / dt2
ERROR: MethodError: no method matching /(::Date, ::Date)

julia> dt - dt2
4411 days

julia> dt2 - dt
-4411 days

julia> dt = DateTime(2012,2,29)
2012-02-29T00:00:00

julia> dt2 = DateTime(2000,2,1)
2000-02-01T00:00:00

julia> dt - dt2
381110400000 milliseconds

Функции доступа

Поскольку типы Date и DateTime хранятся как одиночные значения Int64, части или поля дат можно получить с помощью функций доступа. Функции доступа с маленькими буквами возвращают поле в виде целого числа:

julia> t = Date(2014, 1, 31)
2014-01-31

julia> Dates.year(t)
2014

julia> Dates.month(t)
1

julia> Dates.week(t)
5

julia> Dates.day(t)
31

В то время как функции с заглавными буквами возвращают то же значение в соответствующем типе Period:

julia> Dates.Year(t)
2014 years

julia> Dates.Day(t)
31 days

Предоставлены составные методы, так как они обеспечивают эффективность, если требуются несколько полей одновременно:

julia> Dates.yearmonth(t)
(2014, 1)

julia> Dates.monthday(t)
(1, 31)

julia> Dates.yearmonthday(t)
(2014, 1, 31)

Также можно получить доступ к базовому значению UTInstant или целочисленному значению:

julia> dump(t)
Date
  instant: Dates.UTInstant{Day}
    periods: Day
      value: Int64 735264

julia> t.instant
Dates.UTInstant{Day}(735264 days)

julia> Dates.value(t)
735264

Функции запроса

Функции запроса предоставляют календарную информацию о TimeType. Они включают информацию о дне недели:

julia> t = Date(2014, 1, 31)
2014-01-31

julia> Dates.dayofweek(t)
5

julia> Dates.dayname(t)
"Friday"

julia> Dates.dayofweekofmonth(t) # 5th Friday of January
5

Месяце года:

julia> Dates.monthname(t)
"January"

julia> Dates.daysinmonth(t)
31

А также информацию о году и квартале TimeType:

julia> Dates.isleapyear(t)
false

julia> Dates.dayofyear(t)
31

julia> Dates.quarterofyear(t)
1

julia> Dates.dayofquarter(t)
31

Методы dayname и monthname также могут принимать необязательный ключевой параметр locale, который можно использовать для возвращения названия дня или месяца года для других языков/локалей. Также существуют версии этих функций, возвращающие сокращённые названия, а именно dayabbr и monthabbr. Сначала отображение загружается в переменную LOCALES:

julia> french_months = ["janvier", "février", "mars", "avril", "mai", "juin",
                        "juillet", "août", "septembre", "octobre", "novembre", "décembre"];

julia> french_monts_abbrev = ["janv","févr","mars","avril","mai","juin",
                              "juil","août","sept","oct","nov","déc"];

julia> french_days = ["lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"];

julia> Dates.LOCALES["french"] = Dates.DateLocale(french_months, french_monts_abbrev, french_days, [""]);

Затем вышеупомянутые функции могут использоваться для выполнения запросов:

julia> Dates.dayname(t;locale="french")
"vendredi"

julia> Dates.monthname(t;locale="french")
"janvier"

julia> Dates.monthabbr(t;locale="french")
"janv"

Поскольку сокращённые названия дней не загружаются, попытка использовать функцию dayabbr приведёт к ошибке.

julia> Dates.dayabbr(t;locale="french")
ERROR: BoundsError: attempt to access 1-element Array{String,1} at index [5]
Stacktrace:
[...]

Арифметика типов TimeType и Periods

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

Подход модуля Dates пытается следовать простому принципу, пытаясь максимально сохранить неизменным при выполнении арифметических операций с Period. Этот подход также часто называется календарной арифметикой или тем, что, вероятно, вы бы предположили, если бы вас спросили об этом же расчёте в разговоре. Зачем всё это? Возьмём классический пример: прибавить 1 месяц к 31 января 2014 года. Какой ответ? JavaScript скажет 3 марта (предполагается 31 день). PHP скажет 2 марта (предполагается 30 дней). Фактически, правильного ответа нет. В модуле Dates он даст результат 28 февраля. Как он это определяет? Мне нравится представлять это как классическую игру 7-7-7 в казино.

END_OF_DOCUMENT_MARKER

Теперь представьте, что вместо 7-7-7, используются поля Год-Месяц-День, или, в нашем примере, 2014-01-31. При добавлении 1 месяца к этой дате, значение месяца увеличивается, и теперь у нас 2014-02-31. Затем проверяется число дня, чтобы убедиться, что оно не больше последнего дня нового месяца; если оно больше (как в примере выше), число дня корректируется до последнего дня месяца (28). Какие последствия имеет этот подход? Давайте добавим еще один месяц к нашей дате, 2014-02-28 + Month(1) == 2014-03-28. Что? Вы ожидали последний день марта? Нет, извините, помните поля 7-7-7. Изменяется как можно меньше полей, поэтому мы сначала увеличиваем поле месяца на 1, 2014-03-28, и готово, потому что это действительная дата. С другой стороны, если мы добавим 2 месяца к нашей исходной дате, 2014-01-31, то получим 2014-03-31, как ожидалось. Другим следствием этого подхода является потеря ассоциативности, когда навязывается определенный порядок (т. е. добавление в разном порядке приводит к разным результатам). Например:

julia> (Date(2014,1,29)+Dates.Day(1)) + Dates.Month(1)
2014-02-28

julia> (Date(2014,1,29)+Dates.Month(1)) + Dates.Day(1)
2014-03-01

Что происходит? В первой строке мы добавляем 1 день к 29 января, что приводит к 2014-01-30; затем мы добавляем 1 месяц, получая 2014-02-30, которая затем корректируется до 2014-02-28. Во втором примере мы сначала добавляем 1 месяц, получая 2014-02-29, которая корректируется до 2014-02-28, а затем добавляем 1 день, что приводит к 2014-03-01. Один из принципов проектирования, который помогает в этом случае, заключается в том, что в присутствии нескольких периодов операции будут упорядочены по типам периодов, а не по их значению или порядку; это означает, что Year всегда будет добавлено первым, затем Month, затем Week, и т. д. Следовательно, следующее действительно обеспечивает ассоциативность и работает корректно:

julia> Date(2014,1,29) + Dates.Day(1) + Dates.Month(1)
2014-03-01

julia> Date(2014,1,29) + Dates.Month(1) + Dates.Day(1)
2014-03-01

Сложно? Возможно. Что должен сделать простой Dates пользователь? В конечном счете, необходимо понимать, что явное навязывание определенной ассоциативности при работе с месяцами может привести к неожиданным результатам, но в остальном все должно работать как ожидается. К счастью, это практически все необычные случаи в арифметике дат и периодов при работе со временем в UT (избегая «радостей» работы с летним временем, високосных секунд и т. д.).

В качестве бонуса, все объекты арифметики периодов работают напрямую с диапазонами:

julia> dr = Date(2014,1,29):Day(1):Date(2014,2,3)
2014-01-29:1 day:2014-02-03

julia> collect(dr)
6-element Array{Date,1}:
 2014-01-29
 2014-01-30
 2014-01-31
 2014-02-01
 2014-02-02
 2014-02-03

julia> dr = Date(2014,1,29):Dates.Month(1):Date(2014,07,29)
2014-01-29:1 month:2014-07-29

julia> collect(dr)
7-element Array{Date,1}:
 2014-01-29
 2014-02-28
 2014-03-29
 2014-04-29
 2014-05-29
 2014-06-29
 2014-07-29

Функции корректировки

Насколько удобна арифметика дат и периодов, часто для вычислений с датами требуется календарный или временной характер, а не фиксированное количество периодов. Праздники — идеальный пример; большинство из них следуют правилам, таким как «День памяти = Последний понедельник мая» или «День благодарения = 4-й четверг ноября». Эти виды временных выражений оперируют правилами, относящимися к календарю, такими как первое или последнее число месяца, следующее вторник или первые и третьи среды и т. д.

Модуль Dates предоставляет API корректировки через несколько удобных методов, которые помогают просто и лаконично выразить временные правила. Первая группа методов корректировки относится к первому и последнему дням недели, месяца, квартала и года. Каждый из них принимает единственный TimeType в качестве входных данных и возвращает или корректирует до первого или последнего дня желаемого периода относительно входных данных.

julia> Dates.firstdayofweek(Date(2014,7,16)) # Adjusts the input to the Monday of the input's week
2014-07-14

julia> Dates.lastdayofmonth(Date(2014,7,16)) # Adjusts to the last day of the input's month
2014-07-31

julia> Dates.lastdayofquarter(Date(2014,7,16)) # Adjusts to the last day of the input's quarter
2014-09-30

Следующие два метода высшего порядка, tonext и toprev, обобщают работу с временными выражениями, принимая DateFunction в качестве первого аргумента вместе с исходным TimeType. DateFunction — это просто функция, обычно анонимная, которая принимает один TimeType на вход и возвращает Bool, true указывающий на выполненное условие корректировки. Например:

julia> istuesday = x->Dates.dayofweek(x) == Dates.Tuesday; # Returns true if the day of the week of x is Tuesday

julia> Dates.tonext(istuesday, Date(2014,7,13)) # 2014-07-13 is a Sunday
2014-07-15

julia> Dates.tonext(Date(2014,7,13), Dates.Tuesday) # Convenience method provided for day of the week adjustments
2014-07-15

Это полезно при использовании синтаксиса блока do для более сложных временных выражений:

julia> Dates.tonext(Date(2014,7,13)) do x
           # Return true on the 4th Thursday of November (Thanksgiving)
           Dates.dayofweek(x) == Dates.Thursday &&
           Dates.dayofweekofmonth(x) == 4 &&
           Dates.month(x) == Dates.November
       end
2014-11-27

Метод Base.filter можно использовать для получения всех действительных дат/моментов в заданном диапазоне:

# Pittsburgh street cleaning; Every 2nd Tuesday from April to November
# Date range from January 1st, 2014 to January 1st, 2015
julia> dr = Dates.Date(2014):Day(1):Dates.Date(2015);

julia> filter(dr) do x
           Dates.dayofweek(x) == Dates.Tue &&
           Dates.April <= Dates.month(x) <= Dates.Nov &&
           Dates.dayofweekofmonth(x) == 2
       end
8-element Array{Date,1}:
 2014-04-08
 2014-05-13
 2014-06-10
 2014-07-08
 2014-08-12
 2014-09-09
 2014-10-14
 2014-11-11

Дополнительные примеры и тесты доступны в stdlib/Dates/test/adjusters.jl.

Типы периодов

Периоды — это человеческое представление о дискретных, иногда нерегулярных временных промежутках. Рассмотрим 1 месяц; он может представлять собой, в днях, значение 28, 29, 30 или 31 в зависимости от года и месяца. Или год может представлять 365 или 366 дней в случае високосного года. Типы Period — это простые обёртки Int64 и создаются путем обёртывания любого типа, преобразуемого в Int64, т. е. Year(1) или Month(3.0). Арифметика между Period одного и того же типа ведет себя как с целыми числами, и доступна ограниченная арифметика Period-Real. Вы можете извлечь лежащее в основе целое число с помощью Dates.value.

julia> y1 = Dates.Year(1)
1 year

julia> y2 = Dates.Year(2)
2 years

julia> y3 = Dates.Year(10)
10 years

julia> y1 + y2
3 years

julia> div(y3,y2)
5

julia> y3 - y2
8 years

julia> y3 % y2
0 years

julia> div(y3,3) # mirrors integer division
3 years

julia> Dates.value(Dates.Millisecond(10))
10

Округление

Date и DateTime значения могут быть округлены до заданной точности (например, до 1 месяца или 15 минут) с помощью floor, ceil или round:

julia> floor(Date(1985, 8, 16), Dates.Month)
1985-08-01

julia> ceil(DateTime(2013, 2, 13, 0, 31, 20), Dates.Minute(15))
2013-02-13T00:45:00

julia> round(DateTime(2016, 8, 6, 20, 15), Dates.Day)
2016-08-07T00:00:00

В отличие от числового метода round, который по умолчанию округляет значения, равные по модулю, до ближайшего чётного числа, метод TimeTyperound использует режим округления RoundNearestTiesUp. (Трудно догадаться, что означало бы округление значений по модулю до ближайшего «чётного» TimeType). Дополнительные сведения об доступных режимах округления можно найти в справочнике API.

Округление, как правило, должно работать как ожидается, но есть несколько случаев, в которых ожидаемое поведение не очевидно.

Округление Эпохи

Во многих случаях точность, указанная для округления (например, Dates.Second(30)) делится без остатка на следующий наибольший период (в этом случае Dates.Minute(1)). Но поведение округления в случаях, когда это не так, может привести к путанице. Какой ожидаемый результат округления DateTime до ближайших 10 часов?

julia> round(DateTime(2016, 7, 17, 11, 55), Dates.Hour(10))
2016-07-17T12:00:00

Это может показаться запутанным, учитывая, что час (12) не делится нацело на 10. Причина, по которой выбрано 2016-07-17T12:00:00, заключается в том, что это 17 676 660 часов после 0000-01-01T00:00:00, а 17 676 660 делится на 10.

Поскольку значения Date и DateTime в Julia представлены в соответствии со стандартом ISO 8601, 0000-01-01T00:00:00 было выбрано в качестве базового (или «эпохи округления») для начала подсчёта дней (и миллисекунд) используемых в расчётах округления. (Обратите внимание, что это немного отличается от внутреннего представления Date в Julia с использованием обозначения Rata Die; но так как стандарт ISO 8601 наиболее виден конечному пользователю, 0000-01-01T00:00:00 было выбрано в качестве эпохи округления вместо 0000-12-31T00:00:00 используемого во внутреннем представлении, чтобы свести к минимуму путаницу.)

Единственное исключение из использования 0000-01-01T00:00:00 в качестве эпохи округления — округление до недель. Округление до ближайшей недели всегда возвращает понедельник (первый день недели, как определено в стандарте ISO 8601). По этой причине мы используем 0000-01-03T00:00:00 (первый день первой недели года 0000, как определено в стандарте ISO 8601) в качестве базы при округлении до количества недель.

Вот ещё один случай, в котором ожидаемое поведение не обязательно очевидно: Что произойдёт, если мы округлим до ближайшего P(2), где P — это тип Period? В некоторых случаях (в частности, когда P <: Dates.TimePeriod) ответ ясен:

julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Hour(2))
2016-07-17T08:00:00

julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Minute(2))
2016-07-17T08:56:00

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

julia> round(DateTime(2016, 7, 17, 8, 55, 30), Dates.Month(2))
2016-07-01T00:00:00

Почему округление до первого дня июля, хотя это месяц 7 (нечётное число)? Ключевым моментом является то, что месяцы имеют индексацию с 1 (первый месяц имеет номер 1), в отличие от часов, минут, секунд и миллисекунд (первый из которых имеет номер 0).

Это означает, что округление DateTime до чётного кратного секунд, минут, часов или лет (поскольку спецификация ISO 8601 включает год ноль) приведет к DateTime с чётным значением в этом поле, в то время как округление DateTime до чётного кратного месяцев приведет к тому, что поле месяца будет иметь нечётное значение. Поскольку и месяцы, и годы могут содержать неравномерное количество дней, неизвестно, приведёт ли округление до чётного числа дней к чётному значению в поле дней.

Дополнительную информацию о методах, экспортированных из модуля Dates, можно найти в справочнике API.

Справочник API

Типы дат и времени

Dates.PeriodТип

Period
Year
Month
Week
Day
Hour
Minute
Second
Millisecond
Microsecond
Nanosecond

Типы Period представляют собой дискретные, человеческие представления о временных интервалах.

исходный код

Dates.CompoundPeriodТип

CompoundPeriod

CompoundPeriod полезны для выражения временных интервалов, которые не являются фиксированным кратным меньшим периодам. Например, «год и один день» не является фиксированным числом дней, но может быть выражено с помощью CompoundPeriod. На самом деле, CompoundPeriod автоматически генерируется путем сложения разных типов периодов, например, Year(1) + Day(1) производит результат CompoundPeriod.

исходный код

Dates.InstantТип

Instant

Типы Instant представляют целочисленные, машинные представления времени как непрерывные временные шкалы, начинающиеся с эпохи.

source

Dates.UTInstantТип

UTInstant{T}

Тип UTInstant представляет временную шкалу машины, основанную на времени UT (1 день = одно вращение Земли). T — это Period параметр, который указывает на разрешение или точность момента.

source

Dates.TimeTypeТип

TimeType

Типы TimeType оборачивают экземпляры машины Instant, чтобы предоставить человекочитаемые представления о машинном моменте. Time, DateTime и Date являются подтипами TimeType.

source

Dates.DateTimeТип

DateTime

DateTime оборачивает UTInstant{Millisecond} и интерпретирует его согласно пролептическому григорианскому календарю.

source

Dates.DateТип

Date

Date оборачивает UTInstant{Day} и интерпретирует его согласно пролептическому григорианскому календарю.

source

Dates.TimeТип

Time

Time оборачивает Nanosecond и представляет конкретный момент в 24-часовом дне.

source

Функции Dates

Dates.DateTimeМетод

DateTime(y, [m, d, h, mi, s, ms]) -> DateTime

Создать тип DateTime по частям. Аргументы должны быть преобразуемы в Int64.

source

Dates.DateTimeМетод

DateTime(periods::Period...) -> DateTime

Создать тип DateTime по частям типа Period. Аргументы могут быть в любом порядке. Неуказанные части DateTime будут иметь значение по умолчанию Dates.default(period).

source

Dates.DateTimeМетод

DateTime(f::Function, y[, m, d, h, mi, s]; step=Day(1), limit=10000) -> DateTime

Создать DateTime с помощью API корректировки. Точка отсчета будет создана из предоставленных аргументов y, m, d..., и будет скорректирована до тех пор, пока f::Function не вернет true. Шаг корректировки может быть задан вручную через ключевое слово step. limit устанавливает ограничение на максимальное количество итераций, которое API корректировки будет использовать перед выбросом ошибки (в случае, если f::Function никогда не удовлетворяется).

Примеры

julia> DateTime(dt -> Dates.second(dt) == 40, 2010, 10, 20, 10; step = Dates.Second(1))
2010-10-20T10:00:40

julia> DateTime(dt -> Dates.hour(dt) == 20, 2010, 10, 20, 10; step = Dates.Hour(1), limit = 5)
ERROR: ArgumentError: Adjustment limit reached: 5 iterations
Stacktrace:
[...]
source

Dates.DateTimeМетод

DateTime(dt::Date) -> DateTime

Преобразовать Date в DateTime. Часы, минуты, секунды и миллисекунды нового DateTime предполагаются равными нулю.

source

Dates.DateTimeМетод

DateTime(dt::AbstractString, format::AbstractString; locale="english") -> DateTime

Создать DateTime, разобрав строку даты и времени dt по шаблону, заданному в строке format.

Этот метод создает объект DateFormat каждый раз при вызове. Если вы разбираете много строк дат и времени одного и того же формата, рассмотрите возможность создания объекта DateFormat один раз и использования его вместо второго аргумента.

source

Dates.formatФункция

format(io::IO, tok::AbstractDateToken, dt::TimeType, locale)

Отформатировать токен tok из dt и записать его в io. Форматирование может быть основано на locale.

Все подтипы AbstractDateToken должны определить этот метод, чтобы иметь возможность вывести объект Date / DateTime в соответствии с DateFormat содержащим этот токен.

source

Dates.DateFormatТип

DateFormat(format::AbstractString, locale="english") -> DateFormat

Создать объект форматирования даты, который можно использовать для разбора строк дат или форматирования объекта даты в строку. Для построения строки format можно использовать следующие кодовые символы:

Код Совпадения Комментарий
y 1996, 96 Возвращает год 1996, 0096
Y 1996, 96 Возвращает год 1996, 0096. Эквивалентно y
m 1, 01 Совпадения для месяцев с 1 или 2 цифрами
u Jan Совпадения для сокращенных названий месяцев согласно ключевому слову locale
U January Совпадения для полных названий месяцев согласно ключевому слову locale
d 1, 01 Совпадения для дней с 1 или 2 цифрами
H 00 Совпадения для часов
M 00 Совпадения для минут
S 00 Совпадения для секунд
s .500 Совпадения для миллисекунд
e Mon, Tues Совпадения для сокращенных названий дней недели
E Monday Совпадения для полных названий дней недели
yyyymmdd 19960101 Совпадения для года, месяца и дня с фиксированной длиной

Символы, не указанные выше, обычно рассматриваются как разделители между слотами дат и времени. Например, строка dt "1996-01-15T00:00:00.0" будет иметь строку format вида "y-m-dTH:M:S.s". Если вам нужно использовать код символа как разделитель, вы можете экранировать его с помощью обратного слэша. Дата "1995y01m" будет иметь формат "y\ym\m".

Создание объекта DateFormat дорогостоящее. По возможности, создавайте его один раз и используйте многократно, или используйте макрос строки dateformat"". Использование этого макроса создает объект DateFormat один раз во время макрорасширения и повторно использует его позже. см. @dateformat_str.

См. DateTime и format для того, как использовать объект DateFormat для разбора и записи строк дат соответственно.

source

Dates.@dateformat_strМакрос

dateformat"Y-m-d H:M:S"

Создать объект DateFormat. Похоже на DateFormat("Y-m-d H:M:S"), но создает объект DateFormat один раз во время макрорасширения.

См. DateFormat для получения подробностей о спецификаторах формата.

source

Dates.DateTimeМетод

DateTime(dt::AbstractString, df::DateFormat) -> DateTime

Создать DateTime, разобрав строку даты и времени dt по шаблону, заданному объектом DateFormat. Похоже на DateTime(::AbstractString, ::AbstractString), но более эффективно при многократном разборе аналогично отформатированных строк дат и времени с предварительно созданным объектом DateFormat.

source

Dates.DateМетод

Date(y, [m, d]) -> Date

Создать тип Date по частям. Аргументы должны быть преобразуемы в Int64.

source

Dates.DateМетод

Date(period::Period...) -> Date

Создать тип Date по частям типа Period . Неуказанные части Date будут иметь значение по умолчанию Dates.default(period).

source

Dates.DateМетод

Date(f::Function, y[, m, d]; step=Day(1), limit=10000) -> Date

Создайте Date с помощью API корректировщика. Начальная точка будет построена из предоставленных y, m, d аргументов и будет корректироваться до тех пор, пока f::Function не вернёт true. Размер шага при корректировке можно задать вручную через ключевое слово step. limit устанавливает ограничение на максимальное количество итераций, которое API корректировки будет пытаться выполнить перед выбросом ошибки (при условии, что f::Function никогда не будет удовлетворён).

Примеры

julia> Date(date -> Dates.week(date) == 20, 2010, 01, 01)
2010-05-17

julia> Date(date -> Dates.year(date) == 2010, 2000, 01, 01)
2010-01-01

julia> Date(date -> Dates.month(date) == 10, 2000, 01, 01; limit = 5)
ERROR: ArgumentError: Adjustment limit reached: 5 iterations
Stacktrace:
[...]
исходный код

Dates.DateМетод

Date(dt::DateTime) -> Date

Преобразуйте DateTime в Date. Часть часа, минуты, секунды и миллисекунды DateTime отбрасываются, поэтому при построении используются только год, месяц и день.

исходный код

Dates.DateМетод

Date(d::AbstractString, format::AbstractString; locale="english") -> Date

Построить Date, разобрав строку даты d по шаблону, заданному в строке format.

Этот метод создаёт объект DateFormat каждый раз при вызове. Если вы анализируете много строк дат с одинаковым форматом, рассмотрите возможность создания объекта DateFormat один раз и использования его как второго аргумента вместо этого.

исходный код

Dates.DateМетод

Date(d::AbstractString, df::DateFormat) -> Date

Разбор даты из строки даты d с использованием объекта DateFormat df.

исходный код

Dates.TimeМетод

Time(h, [mi, s, ms, us, ns]) -> Time

Построить тип Time по частям. Аргументы должны быть преобразуемы в Int64.

исходный код

Dates.TimeМетод

Time(period::TimePeriod...) -> Time

Построить тип Time по частям типа Period . Аргументы могут быть в любом порядке. Части Time , которые не заданы, будут по умолчанию равны значению Dates.default(period).

исходный код

Dates.TimeМетод

Time(f::Function, h, mi=0; step::Period=Second(1), limit::Int=10000)
Time(f::Function, h, mi, s; step::Period=Millisecond(1), limit::Int=10000)
Time(f::Function, h, mi, s, ms; step::Period=Microsecond(1), limit::Int=10000)
Time(f::Function, h, mi, s, ms, us; step::Period=Nanosecond(1), limit::Int=10000)

Создайте Time с помощью API корректировщика. Начальная точка будет построена из предоставленных h, mi, s, ms, us аргументов и будет корректироваться до тех пор, пока f::Function не вернёт true. Размер шага при корректировке можно задать вручную через ключевое слово step. limit ограничивает максимальное количество итераций, которое API корректировки будет пытаться выполнить перед выбросом ошибки (если f::Function никогда не будет удовлетворён). Обратите внимание, что шаг по умолчанию будет настраиваться для обеспечения большей точности для заданных аргументов; т.е. если предоставлены аргументы час, минута и секунда, шаг по умолчанию будет Millisecond(1) вместо Second(1).

Примеры

julia> Dates.Time(t -> Dates.minute(t) == 30, 20)
20:30:00

julia> Dates.Time(t -> Dates.minute(t) == 0, 20)
20:00:00

julia> Dates.Time(t -> Dates.hour(t) == 10, 3; limit = 5)
ERROR: ArgumentError: Adjustment limit reached: 5 iterations
Stacktrace:
[...]
исходный код

Dates.TimeМетод

Time(dt::DateTime) -> Time

Преобразуйте DateTime в Time. Части часа, минуты, секунды и миллисекунды DateTime используются для создания новой Time. Микросекунды и наносекунды по умолчанию равны нулю.

исходный код

Dates.nowМетод

now() -> DateTime

Возвращает DateTime, соответствующий системному времени пользователя, включая системную часовую зону и локаль.

исходный код

Dates.nowМетод

now(::Type{UTC}) -> DateTime

Возвращает DateTime, соответствующий системному времени пользователя в формате UTC/GMT.

исходный код

Base.epsФункция

eps(::DateTime) -> Millisecond
eps(::Date) -> Day
eps(::Time) -> Nanosecond

Возвращает Millisecond(1) для значений DateTime, Day(1) для значений Date и Nanosecond(1) для значений Time.

исходный код

Функции доступа

Dates.yearФункция

year(dt::TimeType) -> Int64

Год Date или DateTime в виде Int64.

исходный код

Dates.monthФункция

month(dt::TimeType) -> Int64

Месяц Date или DateTime в виде Int64.

исходный код

Dates.weekФункция

week(dt::TimeType) -> Int64

Возвращает номер недели ISO Date или DateTime в виде Int64. Обратите внимание, что первой неделей года является неделя, содержащая первую четверг года, что может привести к тому, что даты до 4 января будут в последней неделе предыдущего года. Например, week(Date(2005, 1, 1)) — 53-я неделя 2004 года.

Примеры

julia> Dates.week(Date(1989, 6, 22))
25

julia> Dates.week(Date(2005, 1, 1))
53

julia> Dates.week(Date(2004, 12, 31))
53
исходный код

Dates.dayФункция

day(dt::TimeType) -> Int64

День месяца Date или DateTime в виде Int64.

исходный код

Dates.hourФункция

hour(dt::DateTime) -> Int64

Час дня DateTime в виде Int64.

исходный код
hour(t::Time) -> Int64

Час Time в виде Int64.

исходный код

Dates.minuteФункция

minute(dt::DateTime) -> Int64

Минута DateTime в виде Int64.

исходный код
minute(t::Time) -> Int64

Минута Time в виде Int64.

исходный код

Dates.secondФункция

second(dt::DateTime) -> Int64

Секунда DateTime в виде Int64.

исходный код
second(t::Time) -> Int64

Секунда Time в виде Int64.

исходный код

Dates.millisecondФункция

millisecond(dt::DateTime) -> Int64

Миллисекунда DateTime в виде Int64.

исходный код
millisecond(t::Time) -> Int64

Миллисекунда Time в виде Int64.

исходный код

Dates.microsecondФункция

microsecond(t::Time) -> Int64

Микросекунда Time в виде Int64.

исходный код

Dates.nanosecondФункция

nanosecond(t::Time) -> Int64

Наносекунда Time в виде Int64.

исходный код

Dates.YearМетод

Year(v)

Создать объект Year с заданным значением v. Входное значение должно быть без потерь преобразуемо в Int64.

исходный код

Dates.MonthМетод

Month(v)

Создать объект Month с заданным значением v. Входное значение должно быть без потерь преобразуемо в Int64.

исходный код

Dates.WeekМетод

Week(v)

Создать объект Week с заданным значением v. Входное значение должно быть без потерь преобразуемо в Int64.

исходный код

Dates.DayМетод

Day(v)

Создать объект Day с заданным значением v. Входное значение должно быть без потерь преобразуемо в Int64.

исходный код

Dates.HourМетод

Hour(dt::DateTime) -> Hour

Часовая часть DateTime в виде Hour.

исходный код

Dates.MinuteМетод

Minute(dt::DateTime) -> Minute

Минутная часть DateTime в виде Minute.

исходный код

Dates.SecondМетод

Second(dt::DateTime) -> Second

Секундная часть DateTime в виде Second.

исходный код

Dates.MillisecondМетод

Millisecond(dt::DateTime) -> Millisecond

Миллисекундная часть DateTime в виде Millisecond.

исходный код

Dates.MicrosecondМетод

Microsecond(dt::Time) -> Microsecond

Микросекундная часть Time в виде Microsecond.

исходный код

Dates.NanosecondМетод

Nanosecond(dt::Time) -> Nanosecond

Наносекундная часть Time в виде Nanosecond.

исходный код

Dates.yearmonthФункция

yearmonth(dt::TimeType) -> (Int64, Int64)

Одновременный возврат года и месяца Date или DateTime.

исходный код

Dates.monthdayФункция

monthday(dt::TimeType) -> (Int64, Int64)

Одновременный возврат месяца и дня Date или DateTime.

исходный код

Dates.yearmonthdayФункция

yearmonthday(dt::TimeType) -> (Int64, Int64, Int64)

Одновременный возврат года, месяца и дня Date или DateTime.

исходный код

Функции запроса

Dates.daynameФункция

dayname(dt::TimeType; locale="english") -> String

Возвращает полное имя дня недели Date или DateTime в заданном locale.

Примеры

julia> Dates.dayname(Date("2000-01-01"))
"Saturday"
исходный код

Dates.dayabbrФункция

dayabbr(dt::TimeType; locale="english") -> String

Возвращает сокращенное имя дня недели Date или DateTime в заданном locale.

Примеры

julia> Dates.dayabbr(Date("2000-01-01"))
"Sat"
исходный код

Dates.dayofweekФункция

dayofweek(dt::TimeType) -> Int64

Возвращает день недели в виде Int64 с 1 = Monday, 2 = Tuesday, etc..

Примеры

julia> Dates.dayofweek(Date("2000-01-01"))
6
исходный код

Dates.dayofmonthФункция

dayofmonth(dt::TimeType) -> Int64

День месяца Date или DateTime в виде Int64.

исходный код

Dates.dayofweekofmonthФункция

dayofweekofmonth(dt::TimeType) -> Int

Для дня недели dt, возвращает его номер в месяце dt . Если день недели dt - понедельник, то 1 = First Monday of the month, 2 = Second Monday of the month, etc. В диапазоне от 1 до 5.

Примеры

julia> Dates.dayofweekofmonth(Date("2000-02-01"))
1

julia> Dates.dayofweekofmonth(Date("2000-02-08"))
2

julia> Dates.dayofweekofmonth(Date("2000-02-15"))
3
исходный код

Dates.daysofweekinmonthФункция

daysofweekinmonth(dt::TimeType) -> Int

Для дня недели dt, возвращает общее количество этого дня недели в месяце dt . Возвращает 4 или 5. Полезно во временных выражениях для задания последнего дня недели в месяце, включив dayofweekofmonth(dt) == daysofweekinmonth(dt) в функцию корректировки.

Примеры

julia> Dates.daysofweekinmonth(Date("2005-01-01"))
5

julia> Dates.daysofweekinmonth(Date("2005-01-04"))
4
исходный код

Dates.monthnameФункция

monthname(dt::TimeType; locale="english") -> String

Возвращает полное название месяца Date или DateTime в заданном locale.

Примеры

julia> Dates.monthname(Date("2005-01-04"))
"January"
исходный код

Dates.monthabbrФункция

monthabbr(dt::TimeType; locale="english") -> String

Возвращает сокращенное название месяца Date или DateTime в заданном locale.

Примеры

julia> Dates.monthabbr(Date("2005-01-04"))
"Jan"
исходный код

Dates.daysinmonthФункция

daysinmonth(dt::TimeType) -> Int

Возвращает количество дней в месяце dt. Значение будет 28, 29, 30 или 31.

Примеры

julia> Dates.daysinmonth(Date("2000-01"))
31

julia> Dates.daysinmonth(Date("2001-02"))
28

julia> Dates.daysinmonth(Date("2000-02"))
29
исходный код

Dates.isleapyearФункция

isleapyear(dt::TimeType) -> Bool

Возвращает true, если год dt високосный.

Примеры

julia> Dates.isleapyear(Date("2004"))
true

julia> Dates.isleapyear(Date("2005"))
false
исходный код

Dates.dayofyearФункция

dayofyear(dt::TimeType) -> Int

Возвращает день года для dt, где 1 января — день 1.

исходный код

Dates.daysinyearФункция

daysinyear(dt::TimeType) -> Int

Возвращает 366, если год dt високосный, иначе возвращает 365.

Примеры

julia> Dates.daysinyear(1999)
365

julia> Dates.daysinyear(2000)
366
исходный код

Dates.quarterofyearФункция

quarterofyear(dt::TimeType) -> Int

Возвращает квартал, в котором находится dt. Диапазон значений 1:4.

исходный код

Dates.dayofquarterФункция

dayofquarter(dt::TimeType) -> Int

Возвращает день текущего квартала dt. Диапазон значений 1:92.

исходный код

Функции корректировки

Base.truncМетод

trunc(dt::TimeType, ::Type{Period}) -> TimeType

Округляет значение dt в соответствии с предоставленным типом Period.

Примеры

julia> trunc(Dates.DateTime("1996-01-01T12:30:00"), Dates.Day)
1996-01-01T00:00:00
исходный код

Dates.firstdayofweekФункция

firstdayofweek(dt::TimeType) -> TimeType

Корректирует dt на понедельник его недели.

Примеры

julia> Dates.firstdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-01T00:00:00
исходный код

Dates.lastdayofweekФункция

lastdayofweek(dt::TimeType) -> TimeType

Корректирует dt на воскресенье его недели.

Примеры

julia> Dates.lastdayofweek(DateTime("1996-01-05T12:30:00"))
1996-01-07T00:00:00
исходный код

Dates.firstdayofmonthФункция

firstdayofmonth(dt::TimeType) -> TimeType

Корректирует dt на первый день его месяца.

Примеры

julia> Dates.firstdayofmonth(DateTime("1996-05-20"))
1996-05-01T00:00:00
исходный код

Dates.lastdayofmonthФункция

lastdayofmonth(dt::TimeType) -> TimeType

Корректирует dt на последний день его месяца.

Примеры

julia> Dates.lastdayofmonth(DateTime("1996-05-20"))
1996-05-31T00:00:00
исходный код

Dates.firstdayofyearФункция

firstdayofyear(dt::TimeType) -> TimeType

Корректирует dt на первый день его года.

Примеры

julia> Dates.firstdayofyear(DateTime("1996-05-20"))
1996-01-01T00:00:00
исходный код

Dates.lastdayofyearФункция

lastdayofyear(dt::TimeType) -> TimeType

Корректирует dt на последний день его года.

Примеры

julia> Dates.lastdayofyear(DateTime("1996-05-20"))
1996-12-31T00:00:00
исходный код

Dates.firstdayofquarterФункция

firstdayofquarter(dt::TimeType) -> TimeType

Корректирует dt на первый день его квартала.

Примеры

julia> Dates.firstdayofquarter(DateTime("1996-05-20"))
1996-04-01T00:00:00

julia> Dates.firstdayofquarter(DateTime("1996-08-20"))
1996-07-01T00:00:00
исходный код

Dates.lastdayofquarterФункция

lastdayofquarter(dt::TimeType) -> TimeType

Корректирует dt на последний день его квартала.

Примеры

julia> Dates.lastdayofquarter(DateTime("1996-05-20"))
1996-06-30T00:00:00

julia> Dates.lastdayofquarter(DateTime("1996-08-20"))
1996-09-30T00:00:00
исходный код

Dates.tonextМетод

tonext(dt::TimeType, dow::Int; same::Bool=false) -> TimeType

Корректирует dt на следующий день недели, соответствующий dow, с шагом 1 = Monday, 2 = Tuesday, etc. Установка same=true позволяет считать текущую dt следующим dow, что предотвращает корректировку.

исходный код

Dates.toprevМетод

toprev(dt::TimeType, dow::Int; same::Bool=false) -> TimeType

Корректирует dt на предыдущий день недели, соответствующий dow, с шагом 1 = Monday, 2 = Tuesday, etc. Установка same=true позволяет считать текущую dt предыдущим dow, что предотвращает корректировку.

исходный код

Dates.tofirstФункция

tofirst(dt::TimeType, dow::Int; of=Month) -> TimeType

Корректирует dt на первый dow его месяца. В качестве альтернативы, of=Year корректирует на первый dow года.

исходный код

Dates.tolastФункция

tolast(dt::TimeType, dow::Int; of=Month) -> TimeType

Корректирует dt на последний dow его месяца. В качестве альтернативы, of=Year корректирует на последний dow года.

исходный код

Dates.tonextМетод

tonext(func::Function, dt::TimeType; step=Day(1), limit=10000, same=false) -> TimeType

Корректирует dt путем итерации максимум limit раз с шагом step до тех пор, пока func не вернёт true. func должен принимать один аргумент TimeType и возвращать Bool. same позволяет рассматривать dt при удовлетворении func.

исходный код

Dates.toprevМетод

toprev(func::Function, dt::TimeType; step=Day(-1), limit=10000, same=false) -> TimeType

Корректирует dt путем итерации максимум limit раз с шагом step до тех пор, пока func не вернёт true. func должен принимать один аргумент TimeType и возвращать Bool. same позволяет рассматривать dt при удовлетворении func.

исходный код

Периоды

Dates.PeriodМетод

Year(v)
Month(v)
Week(v)
Day(v)
Hour(v)
Minute(v)
Second(v)
Millisecond(v)
Microsecond(v)
Nanosecond(v)

Создаёт тип Period с заданным значением v. Ввод должен быть без потерь преобразуем в Int64.

исходный код

Dates.CompoundPeriodМетод

CompoundPeriod(periods) -> CompoundPeriod

Создаёт CompoundPeriod из Vector Period. Все Period одного типа будут складываться вместе.

Примеры

julia> Dates.CompoundPeriod(Dates.Hour(12), Dates.Hour(13))
25 hours

julia> Dates.CompoundPeriod(Dates.Hour(-1), Dates.Minute(1))
-1 hour, 1 minute

julia> Dates.CompoundPeriod(Dates.Month(1), Dates.Week(-2))
1 month, -2 weeks

julia> Dates.CompoundPeriod(Dates.Minute(50000))
50000 minutes
исходный код

Dates.valueФункция

Dates.value(x::Period) -> Int64

Для заданного периода возвращает значение, связанное с этим периодом. Например, value(Millisecond(10)) возвращает 10 как целое число.

исходный код

Dates.defaultФункция

default(p::Period) -> Period

Возвращает разумное значение «по умолчанию» для ввода Period, возвращая T(1) для Year, Month и Day, и T(0) для Hour, Minute, Second и Millisecond.

исходный код

Функции округления

Значения Date и DateTime могут быть округлены до заданного разрешения (например, 1 месяц или 15 минут) с помощью floor, ceil, или round.

Base.floorМетод

floor(dt::TimeType, p::Period) -> TimeType

Возвращает ближайшее Date или DateTime, меньшее или равное dt с разрешением p.

Для удобства p может быть типом вместо значения: floor(dt, Dates.Hour) — это сокращение для floor(dt, Dates.Hour(1)).

julia> floor(Date(1985, 8, 16), Dates.Month)
1985-08-01

julia> floor(DateTime(2013, 2, 13, 0, 31, 20), Dates.Minute(15))
2013-02-13T00:30:00

julia> floor(DateTime(2016, 8, 6, 12, 0, 0), Dates.Day)
2016-08-06T00:00:00
исходный код

Base.ceilМетод

ceil(dt::TimeType, p::Period) -> TimeType

Возвращает ближайшее Date или DateTime, большее или равное dt с разрешением p.

Для удобства p может быть типом вместо значения: ceil(dt, Dates.Hour) — это сокращение для ceil(dt, Dates.Hour(1)).

julia> ceil(Date(1985, 8, 16), Dates.Month)
1985-09-01

julia> ceil(DateTime(2013, 2, 13, 0, 31, 20), Dates.Minute(15))
2013-02-13T00:45:00

julia> ceil(DateTime(2016, 8, 6, 12, 0, 0), Dates.Day)
2016-08-07T00:00:00
исходный код

Base.roundМетод

round(dt::TimeType, p::Period, [r::RoundingMode]) -> TimeType

Возвращает Date или DateTime, ближайшее к dt с разрешением p. По умолчанию (RoundNearestTiesUp), в случае равенства (например, округление 9:30 до ближайшего часа) будет происходить округление вверх.

Для удобства p может быть типом вместо значения: round(dt, Dates.Hour) — это сокращение для round(dt, Dates.Hour(1)).

julia> round(Date(1985, 8, 16), Dates.Month)
1985-08-01

julia> round(DateTime(2013, 2, 13, 0, 31, 20), Dates.Minute(15))
2013-02-13T00:30:00

julia> round(DateTime(2016, 8, 6, 12, 0, 0), Dates.Day)
2016-08-07T00:00:00

Допустимые режимы округления для round(::TimeType, ::Period, ::RoundingMode) — это RoundNearestTiesUp (по умолчанию), RoundDown (floor) и RoundUp (ceil).

исходный код

Большинство значений Period также могут быть округлены до заданного разрешения:

Base.floorМетод

floor(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> T

Округляет x вниз до ближайшего кратного precision. Если x и precision являются разными подтипами Period, возвращаемое значение будет иметь тот же тип, что и precision.

Для удобства precision может быть типом вместо значения: floor(x, Dates.Hour) — это сокращение для floor(x, Dates.Hour(1)).

julia> floor(Dates.Day(16), Dates.Week)
2 weeks

julia> floor(Dates.Minute(44), Dates.Minute(15))
30 minutes

julia> floor(Dates.Hour(36), Dates.Day)
1 day

Округление до кратного precision Month или Year не поддерживается, так как эти Period имеют непостоянную длину.

исходный код

Base.ceilМетод

ceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> T

Округляет x вверх до ближайшего кратного precision. Если x и precision являются разными подтипами Period, возвращаемое значение будет иметь тот же тип, что и precision.

Для удобства precision может быть типом вместо значения: ceil(x, Dates.Hour) — это сокращение для ceil(x, Dates.Hour(1)).

julia> ceil(Dates.Day(16), Dates.Week)
3 weeks

julia> ceil(Dates.Minute(44), Dates.Minute(15))
45 minutes

julia> ceil(Dates.Hour(36), Dates.Day)
2 days

Округление до кратного precision Month или Year не поддерживается, так как эти Period имеют непостоянную длину.

исходный код

Base.roundМетод

round(x::Period, precision::T, [r::RoundingMode]) where T <: Union{TimePeriod, Week, Day} -> T

Округляет x до ближайшего кратного precision. Если x и precision являются разными подтипами Period, возвращаемое значение будет иметь тот же тип, что и precision. По умолчанию (RoundNearestTiesUp), в случае равенства (например, округление 90 минут до ближайшего часа) будет происходить округление вверх.

Для удобства precision может быть типом вместо значения: round(x, Dates.Hour) — это сокращение для round(x, Dates.Hour(1)).

julia> round(Dates.Day(16), Dates.Week)
2 weeks

julia> round(Dates.Minute(44), Dates.Minute(15))
45 minutes

julia> round(Dates.Hour(36), Dates.Day)
2 days

Допустимые режимы округления для round(::Period, ::T, ::RoundingMode) — это RoundNearestTiesUp (по умолчанию), RoundDown (floor) и RoundUp (ceil).

Округление до кратного precision Month или Year не поддерживается, так как эти Period имеют непостоянную длину.

исходный код

Следующие функции не экспортируются:

Dates.floorceilФункция

floorceil(dt::TimeType, p::Period) -> (TimeType, TimeType)

Одновременно возвращает floor и ceil для Date или DateTime с разрешением p. Более эффективно, чем вызов floor и ceil по отдельности.

исходный код
floorceil(x::Period, precision::T) where T <: Union{TimePeriod, Week, Day} -> (T, T)

Одновременно возвращает floor и ceil для Period с разрешением p. Более эффективно, чем вызов floor и ceil по отдельности.

исходный код

Dates.epochdays2dateФункция

epochdays2date(days) -> Date

Принимает количество дней с эпохи округления (0000-01-01T00:00:00) и возвращает соответствующую Date.

исходный код

Dates.epochms2datetimeФункция

epochms2datetime(milliseconds) -> DateTime

Принимает количество миллисекунд с эпохи округления (0000-01-01T00:00:00) и возвращает соответствующую DateTime.

исходный код

Dates.date2epochdaysФункция

date2epochdays(dt::Date) -> Int64

Принимает заданную Date и возвращает количество дней с эпохи округления (0000-01-01T00:00:00) как Int64.

исходный код

Dates.datetime2epochmsФункция

datetime2epochms(dt::DateTime) -> Int64

Принимает заданную DateTime и возвращает количество миллисекунд с эпохи округления (0000-01-01T00:00:00) как Int64.

исходный код

Функции преобразования

Dates.todayФункция

today() -> Date

Возвращает часть даты для now().

исходный код

Dates.unix2datetimeФункция

unix2datetime(x) -> DateTime

Принимает количество секунд с эпохи Unix 1970-01-01T00:00:00 и преобразует в соответствующую DateTime.

исходный код

Dates.datetime2unixФункция

datetime2unix(dt::DateTime) -> Float64

Принимает заданную DateTime и возвращает количество секунд с эпохи Unix 1970-01-01T00:00:00 как Float64.

исходный код

Dates.julian2datetimeФункция

julian2datetime(julian_days) -> DateTime

Принимает количество дней юлианского календаря с эпохи -4713-11-24T12:00:00 и возвращает соответствующую DateTime.

исходный код

Dates.datetime2julianФункция

datetime2julian(dt::DateTime) -> Float64

Принимает заданную DateTime и возвращает количество дней юлианского календаря с юлианской эпохи -4713-11-24T12:00:00 как Float64.

источник

Dates.rata2datetimeФункция

rata2datetime(days) -> DateTime

Получить число дней Rata Die, прошедших с эпохи 0000-12-31T00:00:00, и вернуть соответствующую DateTime.

источник

Dates.datetime2rataФункция

datetime2rata(dt::TimeType) -> Int64

Возвращает число дней Rata Die, прошедших с эпохи, от заданной Date или DateTime.

источник

Постоянные

Дни недели:

Переменная Сокр. Значение (Целое число)
Monday Mon 1
Tuesday Tue 2
Wednesday Wed 3
Thursday Thu 4
Friday Fri 5
Saturday Sat 6
Sunday Sun 7

Месяцы года:

Переменная Сокр. Значение (Целое число)
January Jan 1
February Feb 2
March Mar 3
April Apr 4
May May 5
June Jun 6
July Jul 7
August Aug 8
September Sep 9
October Oct 10
November Nov 11
December Dec 12

© 2009–2019 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.0.4/stdlib/Dates/

Spec-Zone.ru

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