日期和时间¶
在本演示中,我们将深入了解 Engee 中处理日期和时间的功能。我们将学习 Julia 处理时间数据的基本工具和功能,包括创建、格式化、比较以及对日期和时间执行各种操作。
此外,我们还将重点学习在不同格式之间转换时间数据的过程。这包括将字符串转换为日期和时间对象、在不同时间类型(如日期和 DateTime)之间进行转换,以及将时间数据格式化为符合指定模式的字符串。
该演示既适用于学习在 Julia 中处理时态数据基础知识的初学者,也适用于希望加深这方面知识的经验丰富的开发人员。
我们首先要考虑的是定义日期和时间的可能性。在 Julia 中,持续时间对象表示时间间隔(如小时、分钟、秒),属于 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)
接下来,让我们看看日期和时间定义的其他一些变体及其转换。
我们可以手动设置值,指定日期和时间,例如 2025 年 1 月 2 日,时间 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)
我们还可以通过事先声明名称数组来输出俄文日期。
Dates.LOCALES["ru"] = Dates.DateLocale(
["Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря"],
["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"],
["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"],
["Пн", "Вт", "Ср", "Чг", "Пт", "Сб", "Вс"]);
Dates.format(d, "E dd u YYYY H:MM:SS", locale="ru" )