Документация Engee
Notebook

Дата и время

В этой демонстрации мы подробно рассмотрим функциональные возможности работы с датами и временем в Engee. Мы познакомимся с основными инструментами и функциями, которые есть в языке Julia для работы с временными данными, включая создание, форматирование, сравнение и выполнение различных операций над датами и временем.

Кроме того, мы уделим внимание процессу преобразования временных данных между различными форматами. Это включает конвертацию строк в объекты даты и времени, преобразование между различными временными типами (например, Date и DateTime), а также форматирование для представления временных данных в виде строк, соответствующих заданным шаблонам.

Демонстрация будет полезна как для новичков, изучающих основы работы с временными данными в Julia, так и для опытных разработчиков, которые хотят углубить свои знания в этой области.

И первое, что мы расмотрим, – это возможности определения не даты, а времени. В Julia объекты длительности представляют временные интервалы (например, часы, минуты, секунды) и относятся к семейству типов Period.

Period объекты включают:

  1. Hour(n) — интервал времени в часах,
  2. Minute(n) — интервал времени в минутах,
  3. Second(n) — интервал времени в секундах.

Эти объекты позволяют производить арифметические операции, а также могут быть использованы при работе с объектами даты и времени.

In [ ]:
d1 = Hour(3) + Minute(30) + Second(45)
println(d1)
d2 = Hour(1) + Minute(10) + Second(12)
println(d2)
3 hours, 30 minutes, 45 seconds
1 hour, 10 minutes, 12 seconds
In [ ]:
d1 + d2
Out[0]:
4 hours, 40 minutes, 57 seconds
In [ ]:
d = d1 - d2
Out[0]:
2 hours, 20 minutes, 33 seconds

Также такие типы данных могут быть преобразованы в строки.

In [ ]:
str = string(d)
Out[0]:
"2 hours, 20 minutes, 33 seconds"

Далее рассмотрим функцию Dates.now(). Она возвращает текущие дату и время в виде объекта типа DateTime. Данный тип представляет собой комбинацию даты и времени.

In [ ]:
dnow = Dates.now()
Out[0]:
2024-11-28T08:11:14.118

DateTime также можно представить в формате строки.

In [ ]:
str = string(dnow)
Out[0]:
"2024-11-28T08:11:14.118"

Рассмотрим функцию DateTime(today()). Функция today() возвращает объект типа Date, представляющий текущую дату без учета времени. Конструктор DateTime() преобразует объект Date в объект DateTime, добавляя нулевое время.

In [ ]:
dday = DateTime(today())
Out[0]:
2024-11-28T00:00:00

Арифметика с такими объектами позволяет вычислять временную разницу между двумя моментами времени или находить их сумму.

В нашем случае разница между dnow и dday возвращается в виде объекта типа CompoundPeriod, который выражает интервал времени в понятных единицах – часы, минуты, секунды или миллисекунды.

In [ ]:
difference = (dnow-dday)
Out[0]:
29474118 milliseconds

Преобразуем миллисекунды в часы. В данном случае рассчитаем это значение математически, так как конструктор Hour не просто переводит разницу в часы, а пытается интерпретировать входное значение как строгое количество целых часов. Если результат деления не является целым числом, возникает ошибка.

In [ ]:
Dates.value(difference) / (60 * 60 * 1000)
Out[0]:
8.187255

Далее рассмотрим ещё несколько вариантов определения даты и времени и их трансформаций.

Мы можем задать значения вручную, указав дату и время, например, 2 января 2025 года, время 12:05:00.

In [ ]:
D = DateTime(2025, 1, 2, 12, 5, 0)
Out[0]:
2025-01-02T12:05:00

Либо можем задать набор дат, меняя какой-то из параметров даты в цикле.

In [ ]:
D = [DateTime(2025, month, 2, 12, 5, 0) for month in 1:3]
Out[0]:
3-element Vector{DateTime}:
 2025-01-02T12:05:00
 2025-02-02T12:05:00
 2025-03-02T12:05:00

Также мы можем поменять порядок отображения значений и выводить месяцы не числовыми значениями, а в виде словесного описания.

In [ ]:
str = "2021-09-15 09:12:34"
d = DateTime(str, "yyyy-mm-dd HH:MM:SS")
Out[0]:
2021-09-15T09:12:34
In [ ]:
d = now()  # Текущее дата и время
fmt = "dd U MMMM yyyy, HH:MM:SS AM"  # Формат строки (аналогичный)
str = Dates.format(d, fmt)
Out[0]:
"28 November 0019 2024, 08:19:49 A19"

Вывод

В данной демонстрации мы рассмотрели основные возможности работы с датами и временем в Engee.

Эти инструменты позволяют удобно управлять временными данными в аналитике, учете или форматировании.