[23] > my $now = DateTime.now
2024-09-29T14:59:10.178051+08:00
[24] > my $eight-hours-later = Date.today.DateTime.later(:8hours)
2024-09-29T08:00:00Z
[25] > $now - $eight-hours-later
-3649.82194842
[26] > $now.timezone
28800
[27] > $eight-hours-later.timezone
0
[28] > Date.today.DateTime.timezone
0
[29] > $now.WHAT
(DateTime)
[30] $eight-hours-later.WHAT
(DateTime)
在上面的REPL中,
$now
和$eight-hours-later
都是DateTime
,但是为什么$now
的时区为28800而$eight-hours-later
的时区为0,导致时区不同。
我的 Raku 版本是:
Welcome to Rakudo v2024.05.1.
Implementing the Raku Programming Language v6.d.
Built on MoarVM version 2024.05
DateTime.now:返回系统本地时区的当前日期和时间。它会考虑运行代码的系统的时区设置。
Date.today.to_datetime:Date.today 给出没有任何时间成分的当前日期,当你调用 to_datetime 时,它会将此 Date 转换为 DateTime 对象,时间设置为午夜(00:00:00)。默认情况下,除非明确设置,否则它不携带任何时区信息,从而产生默认时区(可能是 UTC)。
将 DateTime.now 和 Date.today.to_datetime 显式转换为同一时区。
使用库中的时区感知方法来更明确地处理时区转换(例如,Rails 中的 ActiveSupport)。