为什么 DateTime.now 和 Date.today.DateTime 有不同的时区?

问题描述 投票:0回答:1
[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 timezone raku
1个回答
0
投票

DateTime.now:返回系统本地时区的当前日期和时间。它会考虑运行代码的系统的时区设置。

Date.today.to_datetime:Date.today 给出没有任何时间成分的当前日期,当你调用 to_datetime 时,它会将此 Date 转换为 DateTime 对象,时间设置为午夜(00:00:00)。默认情况下,除非明确设置,否则它不携带任何时区信息,从而产生默认时区(可能是 UTC)。

将 DateTime.now 和 Date.today.to_datetime 显式转换为同一时区。

使用库中的时区感知方法来更明确地处理时区转换(例如,Rails 中的 ActiveSupport)。

© www.soinside.com 2019 - 2024. All rights reserved.