Spec-Zone.ru › Julia 1.5

Даты

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

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

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

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

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

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

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

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

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

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

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

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

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

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

julia> dt > dt2
true

julia> dt != dt2
true

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

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

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

julia> dt - dt2
4411 days

julia> dt2 - dt
-4411 days

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

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

julia> dt - dt2
381110400000 milliseconds

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

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

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

julia> Dates.year(t)
2014

julia> Dates.month(t)
1

julia> Dates.week(t)
5

julia> Dates.day(t)
31

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

julia> Dates.Year(t)
2014 years

julia> Dates.Day(t)
31 days

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

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

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

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

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

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

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

julia> Dates.value(t)
735264

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

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

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

julia> Dates.dayofweek(t)
5

julia> Dates.dayname(t)
"Friday"

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

Месяце года:

julia> Dates.monthname(t)
"January"

julia> Dates.daysinmonth(t)
31

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

julia> Dates.isleapyear(t)
false

julia> Dates.dayofyear(t)
31

julia> Dates.quarterofyear(t)
1

julia> Dates.dayofquarter(t)
31

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

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

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

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

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

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

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

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

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

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

julia> Dates.dayabbr(t;locale="french")
ERROR: BoundsError: attempt to access 1-element 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)
Date("2014-01-29"):Day(1):Date("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)
Date("2014-01-29"):Month(1):Date("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

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 — ширину два. У кодов, которые генерируют числовые цифры, есть связанный режим: фиксированной или минимальной ширины. Режим фиксированной ширины дополняет значение нулями слева, если оно короче заданной ширины, и обрезает значение, если оно длиннее. Режим минимальной ширины работает так же, как режим фиксированной ширины, за исключением того, что он не обрезает значения, длиннее заданной ширины.

При создании строки вы можете использовать любые символы, не являющиеся кодами, в качестве разделителей. Например, для создания строки "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:
[...]
исходный код

Dates.DateМетод

Date(dt::DateTime) -> Date

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

исходный код

Dates.DateМетод

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

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

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

исходный код

Dates.DateМетод

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

Разобрать дату из строки даты d с помощью объекта DateFormat df.

исходный код

Dates.TimeМетод

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

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

исходный код

Dates.TimeМетод

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

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

исходный код

Dates.TimeМетод

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

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

Примеры

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

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

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

Dates.TimeМетод

Time(dt::DateTime) -> Time

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

исходный код

Dates.nowМетод

now() -> DateTime

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

исходный код

Dates.nowМетод

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

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

исходный код

Base.epsФункция

eps(::Type{T}) where T<:AbstractFloat
eps()

Возвращает машинную эпсилон типа с плавающей точкой T (по умолчанию T = Float64). Это определяется как разрыв между 1 и следующим по величине значением, представимым typeof(one(T)), и эквивалентно eps(one(T)). (Поскольку eps(T) является границей относительной ошибки T, это «безрамерная» величина, как one.)

Примеры

julia> eps()
2.220446049250313e-16

julia> eps(Float32)
1.1920929f-7

julia> 1.0 + eps()
1.0000000000000002

julia> 1.0 + eps()/2
1.0
исходный код
eps(x::AbstractFloat)

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

eps(x) == max(x-prevfloat(x), nextfloat(x)-x)

Исключения из этого правила — наименьшие и наибольшие конечные значения (например, nextfloat(-Inf) и prevfloat(Inf) для Float64), которые округляются до меньшего из этих значений.

Обоснование этого поведения заключается в том, что eps ограничивает ошибку округления с плавающей точкой. При стандартном режиме округления, если $y$ — вещественное число, а $x$ — ближайшее к $y$ число с плавающей точкой, тогда

\[|y-x| \leq \operatorname{eps}(x)/2.\]

Примеры

julia> eps(1.0)
2.220446049250313e-16

julia> eps(prevfloat(2.0))
2.220446049250313e-16

julia> eps(2.0)
4.440892098500626e-16

julia> x = prevfloat(Inf)      # largest finite Float64
1.7976931348623157e308

julia> x + eps(x)/2            # rounds up
Inf

julia> x + prevfloat(eps(x)/2) # rounds down
1.7976931348623157e308
исходный код
eps(::Type{DateTime}) -> Millisecond
eps(::Type{Date}) -> Day
eps(::Type{Time}) -> Nanosecond
eps(::TimeType) -> Period

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

Примеры

julia> eps(DateTime)
1 millisecond

julia> eps(Date)
1 day

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

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

Dates.yearФункция

year(dt::TimeType) -> Int64

Год Date или DateTime как Int64.

исходный код

Dates.monthФункция

month(dt::TimeType) -> Int64

Месяц Date или DateTime как Int64.

исходный код

Dates.weekФункция

week(dt::TimeType) -> Int64

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

Примеры

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

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

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

Dates.dayФункция

day(dt::TimeType) -> Int64

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

исходный код

Dates.hourФункция

hour(dt::DateTime) -> Int64

Час дня DateTime как Int64.

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

Час Time как Int64.

исходный код

Dates.minuteФункция

minute(dt::DateTime) -> Int64

Минута DateTime как Int64.

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

Минута Time как Int64.

исходный код

Dates.secondФункция

second(dt::DateTime) -> Int64

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

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

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

исходный код

Dates.millisecondФункция

millisecond(dt::DateTime) -> Int64

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

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

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

исходный код

Dates.microsecondФункция

microsecond(t::Time) -> Int64

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

исходный код

Dates.nanosecondФункция

nanosecond(t::Time) -> Int64

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

исходный код

Dates.YearМетод

Year(v)

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

исходный код

Dates.MonthМетод

Month(v)

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

исходный код

Dates.WeekМетод

Week(v)

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

исходный код

Dates.DayМетод

Day(v)

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

исходный код

Dates.HourМетод

Hour(dt::DateTime) -> Hour

Часовая часть DateTime как Hour.

исходный код

Dates.MinuteМетод

Minute(dt::DateTime) -> Minute

Минутная часть DateTime как Minute.

исходный код

Dates.SecondМетод

Second(dt::DateTime) -> Second

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

исходный код

Dates.MillisecondМетод

Millisecond(dt::DateTime) -> Millisecond

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

исходный код

Dates.MicrosecondМетод

Microsecond(dt::Time) -> Microsecond

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

исходный код

Dates.NanosecondМетод

Nanosecond(dt::Time) -> Nanosecond

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

исходный код

Dates.yearmonthФункция

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

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

исходный код

Dates.monthdayФункция

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

Одновременно возвращает месяц и день части Date или DateTime.

исходный код

Dates.yearmonthdayФункция

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

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

исходный код

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

Dates.daynameФункция

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

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

Примеры

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

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

Dates.dayabbrФункция

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

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

Примеры

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

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

Dates.dayofweekФункция

dayofweek(dt::TimeType) -> Int64

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

Примеры

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

Dates.dayofmonthФункция

dayofmonth(dt::TimeType) -> Int64

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

исходный код

Dates.dayofweekofmonthФункция

dayofweekofmonth(dt::TimeType) -> Int

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

Примеры

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

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

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

Dates.daysofweekinmonthФункция

daysofweekinmonth(dt::TimeType) -> Int

Для дня недели dt, возвращает общее количество этого дня недели в месяце dt'a. Возвращает 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 как целое число.

исходный код
END_OF_DOCUMENT_MARKER

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

Возвращает количество дней Рата от эпохи для заданного 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.5.3/stdlib/Dates/

Spec-Zone.ru

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