Engee 文档
Notebook

日期及时间

在这个演示中,我们将详细介绍在Engee中使用日期和时间的功能。 我们将熟悉Julia语言中用于处理时间数据的主要工具和函数,包括创建,格式化,比较和执行日期和时间的各种操作。

此外,我们还将关注在不同格式之间转换临时数据的过程。 这包括将字符串转换为日期和时间对象,在不同的时间类型(例如,日期和日期时间)之间进行转换,以及将时间数据格式化为与指定模式相对应的字符串。

该演示将对初学者学习使用Julia中的临时数据的基础知识以及希望加深这方面知识的经验丰富的开发人员都很有用。

我们首先要考虑的是确定日期而不是时间的可能性。 在Julia中,duration对象表示时间间隔(例如,小时、分钟、秒),属于Period系列类型。

期对象包括:

  1. 小时(n)-以小时为单位的时间间隔,
  2. 分钟(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"

接下来,考虑日期。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中处理日期和时间的主要功能。

这些工具允许您方便地管理分析、会计或格式设置中的临时数据。