Spec-Zone.ru › Julia 1.6

Даты

Модуль 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 до н.э./до н.э. и т.д.

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

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 соответствует "Jan", "Feb", "Mar" и т. д. А U соответствует "January", "February", "March" и т. д. Аналогично другим функциям сопоставления имя-значение 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}(Day(735264))

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 Vector{String} at index [5]
Stacktrace:
[...]

Арифметика TimeType-Period

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

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

Теперь представьте, что вместо 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)
Date("2014-01-29"):Day(1):Date("2014-02-03")

julia> collect(dr)
6-element Vector{Date}:
 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)
Date("2014-01-29"):Month(1):Date("2014-07-29")

julia> collect(dr)
7-element Vector{Date}:
 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 Vector{Date}:
 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.) Дополнительные сведения о доступных режимах RoundingMode можно найти в справочнике 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
Quarter
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 представляют собой целые числа, машинно-ориентированные представления времени как непрерывных временных линий, начиная с эпохи.

исходный код

Dates.UTInstantТип

UTInstant{T}

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

исходный код

Dates.TimeTypeТип

TimeType

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

исходный код

Dates.DateTimeТип

DateTime

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

исходный код

Dates.DateТип

Date

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

исходный код

Dates.TimeТип

Time

Time оборачивает Nanosecond и представляет определённый момент в сутках (24 часа).

исходный код

Dates.TimeZoneТип

TimeZone

Географическая зона, как правило, основанная на долготе, определяющая время в определённом месте. Некоторые часовые пояса соблюдают летнее время (например, EST -> EDT). Для реализации и дополнительной поддержки см. пакет TimeZones.jl

исходный код

Dates.UTCТип

UTC

UTC, или Координированное универсальное время, является TimeZone, от которого отсчитываются все остальные. Оно связано с временем на 0° долготы. Не корректируется с учётом летнего времени.

исходный код

Функции дат

Dates.DateTimeМетод

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

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

исходный код

Dates.DateTimeМетод

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

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

исходный код

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:
[...]
исходный код

Dates.DateTimeМетод

DateTime(dt::Date) -> DateTime

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

исходный код

Dates.DateTimeМетод

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

Построение DateTime путём разбора строки даты и времени dt по шаблону, заданному в строке format (см. DateFormat для синтаксиса).

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

исходный код

Dates.formatМетод

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

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

Код Примеры Комментарий
y 6 Числовой год с фиксированной шириной
Y 1996 Числовой год с минимальной шириной
m 1, 12 Числовой месяц с минимальной шириной
u Янв Сокращённое название месяца до 3 символов в соответствии с ключевым словом locale
U Январь Полное название месяца в соответствии с ключевым словом locale
d 1, 31 День месяца с минимальной шириной
H 0, 23 Час (24-часовой формат) с минимальной шириной
M 0, 59 Минута с минимальной шириной
S 0, 59 Секунда с минимальной шириной
s 000, 500 Миллисекунда с минимальной шириной 3
e Пн, Вт Сокращённые дни недели
E Понедельник Полное название дня недели

Количество последовательных символов кода указывает ширину кода. Формат yyyy-mm указывает, что код y должен иметь ширину четыре, а m - ширину два. У кодов, которые дают числовые цифры, есть связанный режим: фиксированной ширины или минимальной ширины. Режим фиксированной ширины дополняет значение нулями слева, когда оно короче заданной ширины, и обрезает значение, если оно длиннее. Режим минимальной ширины работает так же, как режим фиксированной ширины, за исключением того, что он не обрезает значения, которые длиннее ширины.

При создании format вы можете использовать любые символы, кроме кодов, в качестве разделителей. Например, чтобы сгенерировать строку "1996-01-15T00:00:00", вы можете использовать format: "гггг-мм-ддЧЧ:ММ:СС". Обратите внимание, что если вам нужно использовать символ кода в качестве литерала, вы можете использовать символ экранирования обратную косую черту. Строка "1996y01m" может быть получена с помощью формата "гггг\мм\м".

исходный код

Dates.DateFormatТип

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

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

Код Совпадения Комментарий
y 1996, 96 Возвращает год 1996, 0096
Y 1996, 96 Возвращает год 1996, 0096. Эквивалентно y
m 1, 01 Соответствует месяцам с 1 или 2 цифрами
u Янв Соответствует сокращенным названиям месяцев в соответствии с ключевым словом locale
U Январь Соответствует полным названиям месяцев в соответствии с ключевым словом locale
d 1, 01 Соответствует дням с 1 или 2 цифрами
H 00 Соответствует часам (24-часовой формат)
I 00 Для вывода часов в 12-часовом формате
M 00 Соответствует минутам
S 00 Соответствует секундам
s .500 Соответствует миллисекундам
e Пн, Вт Соответствует сокращенным названиям дней недели
E Понедельник Соответствует полным названиям дней недели
p AM Соответствует AM/PM (регистр не учитывается)
yyyymmdd 19960101 Соответствует году, месяцу и дню с фиксированной шириной

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

Обратите внимание, что 12:00 AM соответствует 00:00 (полночь), а 12:00 PM соответствует 12:00 (полдень). При разборе времени с помощью спецификатора p, любая цифра часа (как H, так и I) интерпретируется как 12-часовой формат, поэтому код I в основном используется для вывода.

Создание объекта 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=ISODateTimeFormat) -> DateTime

Создайте DateTime, разобрав строку даты и времени dt в соответствии с шаблоном, заданным в объекте DateFormat, или dateformat"yyyy-mm-ddTHH:MM:SS.s" по умолчанию.

Аналогично 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:
[...]
source

Dates.DateМетод

Date(dt::DateTime) -> Date

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

source

Dates.DateМетод

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

Создайте Date, разобрав строку даты d в соответствии с шаблоном, заданным строкой format (см. DateFormat для синтаксиса).

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

source

Dates.DateМетод

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

Создайте Date, разобрав строку даты d в соответствии с шаблоном, заданным в объекте DateFormat, или dateformat"yyyy-mm-dd" по умолчанию.

Аналогично Date(::AbstractString, ::AbstractString), но более эффективно при многократном разборе строк дат с аналогичным форматом при помощи предварительно созданного объекта DateFormat.

source

Dates.TimeМетод

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

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

source

Dates.TimeМетод

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

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

source

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(::Type{DateTime}) -> Millisecond
eps(::Type{Date}) -> Day
eps(::Type{Time}) -> Nanosecond
eps(::TimeType) -> Period

Возвращает наименьшее значение единицы, поддерживаемое TimeType.

Примеры

julia> eps(DateTime)
1 millisecond

julia> eps(Date)
1 day

julia> eps(Time)
1 nanosecond
исходный код

Функции-аксессоры

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
dayname(day::Integer; locale="english") -> String

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

Примеры

julia> Dates.dayname(Date("2000-01-01"))
"Saturday"

julia> Dates.dayname(4)
"Thursday"
исходный код

Dates.dayabbrФункция

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

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

Примеры

julia> Dates.dayabbr(Date("2000-01-01"))
"Sat"

julia> Dates.dayabbr(3)
"Wed"
исходный код

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
monthname(month::Integer, locale="english") -> String

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

Примеры

julia> Dates.monthname(Date("2005-01-04"))
"January"

julia> Dates.monthname(2)
"February"
исходный код

Dates.monthabbrФункция

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

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

Примеры

julia> Dates.monthabbr(Date("2005-01-04"))
"Jan"

julia> monthabbr(2)
"Feb"
исходный код

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)
Quarter(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

Возвращает разумное значение по умолчанию для входного периода, возвращая T(1) для года, месяца и дня, и T(0) для часа, минуты, секунды и миллисекунды.

исходный код

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

Значения 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

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

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

Spec-Zone.ru

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