class Instant is Cool does Real { }

Instant 是时间中的特定时刻,以原子秒为单位进行测量,带分数。它不与任何纪元相关联或感知任何纪元。

Instant 可用于创建设置为该 InstantDateTime 对象。伪常量 now 将当前时间作为 Instant 返回。

Instant(以及 Duration)定义了基本数学运算。将 Instant 添加到 Duration 会返回另一个 Instant。减去两个 Instant 将产生一个 Duration。明确禁止添加两个 Instant。所有其他使用 Instant 的运算都是未定义的。

未来的闰秒§

涉及闰秒知识的方法总是假设在实现知道的最后一个闰秒之后不会再有闰秒,这可能不是实际安排的最后一个闰秒。这意味着根据你使用的编译器版本,你可能会得到不同的结果。例如,2016 年 12 月 31 日的闰秒在 7 月份宣布,并随 Rakudo 2016.07 一起发布,因此 2016.06 及更早版本不会知道它。

$ perl6-2016.06 -e 'say Instant.from-posix: 1485726595'
Instant:1485726631

$ perl6-2016.07 -e 'say Instant.from-posix: 1485726595'
Instant:1485726632

由于 Rakudo 编译器始终为其不知道的未来闰秒返回 0,因此当宣布新的闰秒时,你可以修补旧代码,这样它将给出正确的结果,无论它运行在哪个版本的编译器上

$ perl6-2016.06 -e 'say ($*VM.version before v2016.07 ?? 1 !! 0) + Instant.from-posix: 1485726595'
Instant:1485726632

$ perl6-2016.07 -e 'say ($*VM.version before v2016.07 ?? 1 !! 0) + Instant.from-posix: 1485726595'
Instant:1485726632

这些示例需要早于重命名的编译器,因此仍然引用 perl6。

方法§

方法 from-posix§

method from-posix($posixBool $prefer-leap-second = False)

将 POSIX 时间戳 $posix 转换为 Instant。如果 $prefer-leap-secondTrue,则返回值将是闰秒情况下可能的两个秒中的第一个。

say DateTime.new(Instant.from-posix(915148800True));  # OUTPUT: «1998-12-31T23:59:60Z␤» 
say DateTime.new(Instant.from-posix(915148800));        # OUTPUT: «1999-01-01T00:00:00Z␤»

方法 to-posix§

method to-posix()

将调用者转换为 POSIX 时间戳,并返回一个包含 POSIX 时间戳和 Bool 的两元素列表。它是 方法 from-posix 的逆,但第二个返回值为 True 当且仅当此 Instant 处于闰秒时。

say DateTime.new("1999-01-01T00:00:00Z").Instant.to-posix# OUTPUT: «(915148800 False)␤» 
say DateTime.new('1998-12-31T23:59:60Z').Instant.to-posix# OUTPUT: «(915148800 True)␤»

方法 Date§

method Date(Instant:D: --> Date:D)

将调用者强制转换为 Date

my $i = "/etc/passwd".IO.modified;
say $i;             # OUTPUT: «Instant:1451489025.878018␤» 
say $i.Date;        # OUTPUT: «2015-12-30␤»

方法 DateTime§

method DateTime(Instant:D: --> DateTime:D)

将调用者强制转换为 DateTime

say now.DateTime;  # OUTPUT: «2017-05-09T14:02:58.147165Z␤»

类型图§

Instant 的类型关系
raku-type-graph Instant Instant Cool Cool Instant->Cool Real Real Instant->Real Mu Mu Any Any Any->Mu Cool->Any Numeric Numeric Real->Numeric

展开上面的图表