为何Raku中DateTime.now与Date.today.DateTime时区不同?
Raku DateTime时区差异原因解析
核心原因是两个DateTime对象的创建逻辑不同,默认时区规则存在差异:
DateTime.now的时区规则:
该方法默认采用系统本地时区生成对象。你的系统时区对应+08:00(秒数偏移为28800),因此$now的时区偏移值为28800,输出显示为+08:00。Date.today.DateTime的时区规则:Date.today获取的是本地日期,但调用.DateTime方法时,该方法默认生成UTC时区(偏移0秒,即Z时区)的DateTime对象。后续调用.later(:8hours)仅在UTC时间基础上增加8小时,不会修改时区属性,因此$eight-hours-later的时区偏移始终为0。
直接验证依据:
从你提供的REPL输出可直接确认:
[28] > Date.today.DateTime.timezone
0
这直接证明Date.today.DateTime生成的是UTC时区的对象。
额外提示:
如果需要让Date.today.DateTime生成本地时区的对象,可以显式指定时区参数,例如:
my $local-today-datetime = Date.today.DateTime(:timezone(DateTime.now.timezone));
内容的提问来源于stack exchange,提问作者ohmycloudy
相关产品推荐
相关产品推荐

