Даты
Модуль 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/