Даты
Модуль 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 до н. э./до н. э. и т. д.
Понятие секунды UT на самом деле довольно фундаментально. В целом приняты в основном два разных понятия времени, одно основано на физическом вращении Земли (полное вращение = 1 день), другое основано на секунде СИ (фиксированное, постоянное значение). Это кардинально разные вещи! Подумайте об этом, "секунда UT", определённая относительно вращения Земли, может иметь различную абсолютную длительность в зависимости от дня! Так или иначе, тот факт, что Date и DateTime основаны на секундах UT, является упрощающим, но честным предположением, чтобы избежать таких сложностей, как високосные секунды и все связанные с ними сложности. Эта основа времени формально называется UT или UT1. Основание типов на секунде UT фактически означает, что каждая минута имеет 60 секунд, а каждый день — 24 часа, что приводит к более естественным расчётам при работе с календарными датами.
Конструкторы
Типы Date и DateTime можно создать с помощью целых чисел или типов Period, через парсинг или с помощью корректоров (подробнее об этом позже):
julia> DateTime(2013) 2013-01-01T00:00:00 julia> DateTime(2013,7) 2013-07-01T00:00:00 julia> DateTime(2013,7,1) 2013-07-01T00:00:00 julia> DateTime(2013,7,1,12) 2013-07-01T12:00:00 julia> DateTime(2013,7,1,12,30) 2013-07-01T12:30:00 julia> DateTime(2013,7,1,12,30,59) 2013-07-01T12:30:59 julia> DateTime(2013,7,1,12,30,59,1) 2013-07-01T12:30:59.001 julia> Date(2013) 2013-01-01 julia> Date(2013,7) 2013-07-01 julia> Date(2013,7,1) 2013-07-01 julia> Date(Dates.Year(2013),Dates.Month(7),Dates.Day(1)) 2013-07-01 julia> Date(Dates.Month(7),Dates.Year(2013)) 2013-07-01
Парсинг типов Date или DateTime осуществляется с помощью строк формата. Строки формата работают на основе определения «разграниченных» или «фиксированных» «слотов», содержащих период для парсинга, и передачи текста для парсинга и строки формата в конструктор Date или DateTime в формате Date("2015-01-01","y-m-d") или DateTime("20150101","yyyymmdd").
Разграниченные слоты отмечаются указанием разделителя, который парсер должен ожидать между двумя последовательными периодами; таким образом, "y-m-d" сообщает парсеру, что между первым и вторым слотами в строке даты, например, "2014-07-16", он должен найти символ -. Символы y, m, и d сообщают парсеру, какие периоды парсить в каждом слоте.
Фиксированные слоты задаются повторением символа периода количество раз, соответствующее ширине, без разделителей между символами. Таким образом, "yyyymmdd" соответствует строке даты, такой как "20140716". Парсер различает фиксированный слот по отсутствию разделителя, отмечая переход "yyyymm" от одного символа периода к следующему.
Поддержка парсинга месяца в текстовой форме также поддерживается символами u и U, для сокращённых и полных имён месяцев соответственно. По умолчанию поддерживаются только английские имена месяцев, поэтому u соответствует "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 одного типа ведут себя как целые числа, и доступна ограниченная арифметика периодов. Вы можете извлечь базовое целое число с помощью Dates.value.
julia> y1 = Dates.Year(1) 1 year julia> y2 = Dates.Year(2) 2 years julia> y3 = Dates.Year(10) 10 years julia> y1 + y2 3 years julia> div(y3,y2) 5 julia> y3 - y2 8 years julia> y3 % y2 0 years julia> div(y3,3) # mirrors integer division 3 years julia> Dates.value(Dates.Millisecond(10)) 10
Округление
Date и DateTime значения могут быть округлены до указанного разрешения (например, 1 месяц или 15 минут) с помощью floor, ceil или round:
julia> floor(Date(1985, 8, 16), Dates.Month) 1985-08-01 julia> ceil(DateTime(2013, 2, 13, 0, 31, 20), Dates.Minute(15)) 2013-02-13T00:45:00 julia> round(DateTime(2016, 8, 6, 20, 15), Dates.Day) 2016-08-07T00:00:00
В отличие от числового метода round, который по умолчанию разрывает связи в сторону четного числа, метод TimeTyperound использует режим округления RoundNearestTiesUp. (Трудно догадаться, что означало бы разрыв связей до ближайшего «четного» TimeType). Дополнительные сведения о доступных режимах округления можно найти в справочнике по API.
Округление обычно должно работать как ожидается, но есть несколько случаев, в которых ожидаемое поведение не очевидно.
Округление эпохи
Во многих случаях разрешение, заданное для округления (например, Dates.Second(30)) равномерно делится на следующий больший период (в данном случае, Dates.Minute(1)). Но поведение округления в тех случаях, когда это не так, может привести к путанице. Каков ожидаемый результат округления DateTime до ближайших 10 часов?
julia> round(DateTime(2016, 7, 17, 11, 55), Dates.Hour(10)) 2016-07-17T12:00:00
Это может показаться запутанным, учитывая, что час (12) не делится на 10. Причина, по которой был выбран 2016-07-17T12:00:00, заключается в том, что он находится на 17 676 660 часов после 0000-01-01T00:00:00, а 17 676 660 делится на 10.
Поскольку Julia Date и DateTime значения представлены в соответствии со стандартом ISO 8601, 0000-01-01T00:00:00 был выбран в качестве основы (или «эпохи округления»), с которой начинается подсчет дней (и миллисекунд), используемых в вычислениях округления. (Обратите внимание, что это немного отличается от внутренней репрезентации Julia Date с использованием нотации 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
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: «гггг-мм-ддЧЧ:ММ:СС». Обратите внимание, что если вам нужно использовать символ кода в качестве литерала, вы можете использовать символ экранирования обратный слэш. Строка «1996y01m» может быть создана с помощью формата «гггг\ymm\m».
Dates.DateFormatТип
DateFormat(format::AbstractString, locale="english") -> DateFormat
Создание объекта форматирования дат, который может использоваться для разбора строк дат или форматирования объекта даты как строки. Следующие символьные коды могут использоваться для построения строки format:
| Код | Совпадения | Комментарий |
|---|---|---|
y |
1996, 96 | Возвращает год 1996, 0096 |
Y |
1996, 96 | Возвращает год 1996, 0096. Эквивалентно y
|
m |
1, 01 | Совпадает с месяцами от 1 до 2 цифр |
u |
Jan | Совпадает с сокращенными названиями месяцев в соответствии с ключевым словом locale |
U |
January | Совпадает с полными названиями месяцев в соответствии с ключевым словом locale |
d |
1, 01 | Совпадает с днями от 1 до 2 цифр |
H |
00 | Совпадает с часами (24-часовой формат) |
I |
00 | Для вывода часов в 12-часовом формате |
M |
00 | Совпадает с минутами |
S |
00 | Совпадает со секундами |
s |
.500 | Совпадает с миллисекундами |
e |
Mon, Tues | Совпадает с сокращенными названиями дней недели |
E |
Monday | Совпадает с полными названиями дней недели |
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: [...]source
Dates.DateМетод
Date(dt::DateTime) -> Date
Преобразовать DateTime в Date. Части часа, минуты, секунды и миллисекунды DateTime усекаются, поэтому при построении используются только год, месяц и день.
Dates.DateМетод
Date(d::AbstractString, format::AbstractString; locale="english") -> Date
Создать объект Date, разобрав строку даты d по шаблону, заданному в строке format.
Этот метод создаёт объект DateFormat каждый раз при вызове. Если вы разрабатываете много строк дат с одинаковым форматом, рассмотрите создание объекта DateFormat один раз и использование его в качестве второго аргумента вместо этого.
Dates.DateМетод
Date(d::AbstractString, df::DateFormat) -> Date
Разбор даты из строки даты d с помощью объекта DateFormat df.
Dates.TimeМетод
Time(h, [mi, s, ms, us, ns]) -> Time
Создать объект типа Time по частям. Аргументы должны быть преобразуемы в Int64.
Dates.TimeМетод
Time(period::TimePeriod...) -> Time
Создать объект типа Time по частям типа Period. Аргументы могут быть в любом порядке. Time части, не предоставленные, будут иметь значение по умолчанию Dates.default(period).
Dates.TimeМетод
Time(f::Function, h, mi=0; step::Period=Second(1), limit::Int=10000) Time(f::Function, h, mi, s; step::Period=Millisecond(1), limit::Int=10000) Time(f::Function, h, mi, s, ms; step::Period=Microsecond(1), limit::Int=10000) Time(f::Function, h, mi, s, ms, us; step::Period=Nanosecond(1), limit::Int=10000)
Создать объект Time с помощью API корректировки. Точка начала будет построена из предоставленных аргументов h, mi, s, ms, us, и будет корректироваться до тех пор, пока f::Function не вернёт true. Размер шага при корректировке может быть задан вручную через параметр step. limit устанавливает ограничение на максимальное число итераций, которое API корректировки будет пытаться выполнить перед ошибкой (в случае, если f::Function никогда не будет удовлетворён). Обратите внимание, что шаг по умолчанию будет корректировать для достижения большей точности для заданных аргументов; то есть, если заданы аргументы часа, минуты и секунды, шаг по умолчанию будет Millisecond(1) вместо Second(1).
Примеры
julia> Dates.Time(t -> Dates.minute(t) == 30, 20) 20:30:00 julia> Dates.Time(t -> Dates.minute(t) == 0, 20) 20:00:00 julia> Dates.Time(t -> Dates.hour(t) == 10, 3; limit = 5) ERROR: ArgumentError: Adjustment limit reached: 5 iterations Stacktrace: [...]source
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
Микросекундная часть времени как Microsecond.
Dates.NanosecondМетод
Nanosecond(dt::Time) -> Nanosecond
Наносекундная часть времени как 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 не поддерживается, так как эти значения имеют переменную длину.
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
Возвращает количество дней Рата с эпохи для заданной Date или DateTime.
Константы
Дни недели:
| Переменная | Сокр. | Значение (Int) |
|---|---|---|
Monday |
Mon |
1 |
Tuesday |
Tue |
2 |
Wednesday |
Wed |
3 |
Thursday |
Thu |
4 |
Friday |
Fri |
5 |
Saturday |
Sat |
6 |
Sunday |
Sun |
7 |
Месяцы года:
| Переменная | Сокр. | Значение (Int) |
|---|---|---|
January |
Jan |
1 |
February |
Feb |
2 |
March |
Mar |
3 |
April |
Apr |
4 |
May |
May |
5 |
June |
Jun |
6 |
July |
Jul |
7 |
August |
Aug |
8 |
September |
Sep |
9 |
October |
Oct |
10 |
November |
Nov |
11 |
December |
Dec |
12 |
© 2009–2020 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.3.1/stdlib/Dates/