Дата и время¶
В этой демонстрации мы подробно рассмотрим функциональные возможности работы с датами и временем в Engee. Мы познакомимся с основными инструментами и функциями, которые есть в языке Julia для работы с временными данными, включая создание, форматирование, сравнение и выполнение различных операций над датами и временем.
Кроме того, мы уделим внимание процессу преобразования временных данных между различными форматами. Это включает конвертацию строк в объекты даты и времени, преобразование между различными временными типами (например, Date и DateTime), а также форматирование для представления временных данных в виде строк, соответствующих заданным шаблонам.
Демонстрация будет полезна как для новичков, изучающих основы работы с временными данными в Julia, так и для опытных разработчиков, которые хотят углубить свои знания в этой области.
И первое, что мы расмотрим, – это возможности определения не даты, а времени. В Julia объекты длительности представляют временные интервалы (например, часы, минуты, секунды) и относятся к семейству типов Period.
Period объекты включают:
- Hour(n) — интервал времени в часах,
- Minute(n) — интервал времени в минутах,
- Second(n) — интервал времени в секундах.
Эти объекты позволяют производить арифметические операции, а также могут быть использованы при работе с объектами даты и времени.
d1 = Hour(3) + Minute(30) + Second(45)
println(d1)
d2 = Hour(1) + Minute(10) + Second(12)
println(d2)
d1 + d2
d = d1 - d2
Также такие типы данных могут быть преобразованы в строки.
str = string(d)
Далее рассмотрим функцию Dates.now(). Она возвращает текущие дату и время в виде объекта типа DateTime. Данный тип представляет собой комбинацию даты и времени.
dnow = Dates.now()
DateTime также можно представить в формате строки.
str = string(dnow)
Рассмотрим функцию DateTime(today()). Функция today() возвращает объект типа Date, представляющий текущую дату без учета времени. Конструктор DateTime() преобразует объект Date в объект DateTime, добавляя нулевое время.
dday = DateTime(today())
Арифметика с такими объектами позволяет вычислять временную разницу между двумя моментами времени или находить их сумму.
В нашем случае разница между dnow и dday возвращается в виде объекта типа CompoundPeriod, который выражает интервал времени в понятных единицах – часы, минуты, секунды или миллисекунды.
difference = (dnow-dday)
Преобразуем миллисекунды в часы. В данном случае рассчитаем это значение математически, так как конструктор Hour не просто переводит разницу в часы, а пытается интерпретировать входное значение как строгое количество целых часов. Если результат деления не является целым числом, возникает ошибка.
Dates.value(difference) / (60 * 60 * 1000)
Далее рассмотрим ещё несколько вариантов определения даты и времени и их трансформаций.
Мы можем задать значения вручную, указав дату и время, например, 2 января 2025 года, время 12:05:00.
D = DateTime(2025, 1, 2, 12, 5, 0)
Либо можем задать набор дат, меняя какой-то из параметров даты в цикле.
D = [DateTime(2025, month, 2, 12, 5, 0) for month in 1:3]
Также мы можем поменять порядок отображения значений и выводить месяцы не числовыми значениями, а в виде словесного описания.
str = "2021-09-15 09:12:34"
d = DateTime(str, "yyyy-mm-dd HH:MM:SS")
d = now() # Текущее дата и время
fmt = "dd U MMMM yyyy, HH:MM:SS AM" # Формат строки (аналогичный)
str = Dates.format(d, fmt)
Вывод¶
В данной демонстрации мы рассмотрели основные возможности работы с датами и временем в Engee.
Эти инструменты позволяют удобно управлять временными данными в аналитике, учете или форматировании.