在角色 Dateish 中§
有关方法 later 的主要文档,请参阅上下文
multi method later(DateTime: *)
返回一个基于当前对象(属于混入此角色的任何类)的对象,但应用了时间增量。时间增量可以作为命名参数传递,其中参数名称是单位。
除非给定的单位是 second
或 seconds
,否则给定的值将被转换为 Int
。
允许的单位有 second
、seconds
、minute
、minutes
、hour
、hours
、day
、days
、week
、weeks
、month
、months
、year
、years
。请注意,复数形式只能与 later
和 earlier
方法一起使用。
冒号对的 :2nd
形式可以作为一种紧凑且自文档化的方式来指定时间差。
say DateTime.new('2015-12-24T12:23:00Z').later(:2years);# OUTPUT: «2017-12-24T12:23:00Z»
由于几个不同时间单位的加法不满足交换律,因此只能传递一个单位(并且将使用第一个多重单位)。
my = DateTime.new(date => Date.new('2015-02-27'));say .later(month => 1).later(:2days); # OUTPUT: «2015-03-29T00:00:00Z»say .later(days => 2).later(:1month); # OUTPUT: «2015-04-01T00:00:00Z»say .later(days => 2).later(:month); # same, as +True === 1
您还可以(自 Rakudo 编译器 2021.02 版本起)同时传递多个单位,但您必须将它们加入到 List
中以激活第二种形式。
say DateTime.new(date => Date.new('2015-02-27')).later( (:1month, :2days) )# OUTPUT: «2015-03-29T00:00:00Z»
如果结果时间的秒数值为 60
,但该时间实际上不存在闰秒,则秒数将设置为 59
。
say DateTime.new('2008-12-31T23:59:60Z').later: :1day;# OUTPUT: «2009-01-01T23:59:59Z»
允许负偏移量,但使用 earlier 更为惯用。
Date
类型的对象的行为方式相同。
my = Date.new('2015-02-27');say .later(month => 1).later(:2days); # OUTPUT: «2015-03-29»say .later(days => 2).later(:1month); # OUTPUT: «2015-04-01»say .later(days => 2).later(:month); # same, as +True === 1