Engee 文档
Notebook

日期和时间

在本演示中,我们将深入了解 Engee 中处理日期和时间的功能。我们将学习 Julia 处理时间数据的基本工具和功能,包括创建、格式化、比较以及对日期和时间执行各种操作。

此外,我们还将重点学习在不同格式之间转换时间数据的过程。这包括将字符串转换为日期和时间对象、在不同时间类型(如日期和 DateTime)之间进行转换,以及将时间数据格式化为符合指定模式的字符串。

该演示既适用于学习在 Julia 中处理时态数据基础知识的初学者,也适用于希望加深这方面知识的经验丰富的开发人员。

我们首先要考虑的是定义日期和时间的可能性。在 Julia 中,持续时间对象表示时间间隔(如小时、分钟、秒),属于 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]:
2025-02-17T07:23:03.059

DateTime 也可以字符串格式表示。

In [ ]:
str = string(dnow)
Out[0]:
"2025-02-17T07:23:03.059"

请看 DateTime(today()) 函数。today() 函数返回一个 Date 类型的对象,表示当前日期,不含时间。DateTime() 构造函数通过添加零时间将 Date 对象转换为 DateTime 对象。

In [ ]:
dday = DateTime(today())
Out[0]:
2025-02-17T00:00:00

使用此类对象进行算术运算,可以计算两个时刻的时间差或求和。

在我们的例子中,dnow 和 dday 之间的差值将作为 CompoundPeriod 类型的对象返回,该对象以可理解的单位(小时、分钟、秒或毫秒)表示时间间隔。

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

让我们把毫秒转换成小时。在这种情况下,让我们用数学方法来计算这个值,因为 Hour 构造函数并不只是将差值转换成小时,它还试图将输入值解释为严格的整小时数。如果除法的结果不是整数,就会发生错误。

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

接下来,让我们看看日期和时间定义的其他一些变体及其转换。

我们可以手动设置值,指定日期和时间,例如 2025 年 1 月 2 日,时间 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]:
"17 February 0023 2025, 07:23:04 A23"

我们还可以通过事先声明名称数组来输出俄文日期。

In [ ]:
Dates.LOCALES["ru"] = Dates.DateLocale(
["Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря"],
["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"],
["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"],
["Пн", "Вт", "Ср", "Чг", "Пт", "Сб", "Вс"]);

Dates.format(d, "E dd u YYYY H:MM:SS", locale="ru" )
Out[0]:
"Понедельник 17 Фев 2025 7:23:04"

输出

在本演示中,我们了解了在 Engee 中处理日期和时间的基本功能。

通过这些工具,您可以在分析、会计或格式化中方便地管理时间数据。