Spec-Zone.ru › Julia 1.4

Даты

Модуль 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}(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-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)
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

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

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

Модуль 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.) Более подробные сведения о доступных режимах 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
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.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 один раз и использование его в качестве второго аргумента вместо этого.

источник

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: "гггг-мм-ддТчч:мм:сс". Обратите внимание, что если вам нужно использовать символ кода как литерал, вы можете использовать символ экранирования обратный слэш. Строка "1996г01м" может быть создана с помощью формата "гггг\мм\м".

источник

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

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

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

Исходный код

Dates.@dateformat_strМакрос

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

Создайте объект DateFormat. Аналогично DateFormat("Y-m-d H:M:S"), но создаёт объект DateFormat один раз во время разбора макроса.

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

Исходный код

Dates.DateTimeМетод

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

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

Исходный код

Dates.DateМетод

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

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

Исходный код

Dates.DateМетод

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

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

Исходный код

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 никогда не будет удовлетворено). Обратите внимание, что значение по умолчанию для шага будет скорректировано для обеспечения большей точности для заданных аргументов; то есть, если предоставлены аргументы hour, minute и second, значение по умолчанию для шага будет 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
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)
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–2020 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.4.2/stdlib/Dates/

Spec-Zone.ru

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