如何生成以 5 分钟为单位的日期时间范围?

che*_*nyf 9 datetime raku

如何生成以 5 分钟为单位的日期时间范围?以下是输出:

2022-02-13 00:00:00, 2022-02-13 00:05:00
2022-02-13 00:05:00, 2022-02-13 00:10:00
2022-02-13 00:10:00, 2022-02-13 00:15:00
2022-02-13 00:15:00, 2022-02-13 00:20:00
...
2022-02-13 23:45:00, 2022-02-13 23:50:00
2022-02-13 23:50:00, 2022-02-13 23:55:00
2022-02-13 23:55:00, 2022-02-14 00:00:00
Run Code Online (Sandbox Code Playgroud)

小智 9

可以使用顺序运算符

# when to start when to finish
my $start = DateTime.now.truncated-to("day");
my $end   = $start.later(:1day);

# after start, add 5 mins repeatedly, and stop when end is exceeded
say $start, *.later(:5minutes) ... * >= $end;
Run Code Online (Sandbox Code Playgroud)

  • 在我看到你先说之前,我也正要发布这个:)。如果您想在一行中包含无限序列,可以将其写为“my $seq = (DateTime.new('2022-02-13T00:00:00'), *.later(:5分钟) … *) `。 (3认同)
  • `DateTime.now.truncated-to("day")` 我认为这是 `Date.today.DateTime` 的简写? (3认同)

Eli*_*sen 8

使用间隔模块。

use Interval;
my $dt = Interval[300].new(time);
say $dt++ for ^5; 

2022-02-13T15:29:03Z
2022-02-13T15:34:03Z
2022-02-13T15:39:03Z
2022-02-13T15:44:03Z
2022-02-13T15:49:03Z
Run Code Online (Sandbox Code Playgroud)


wam*_*mba 5

my $dt = Date.today.DateTime;

$dt.clone: formatter => { .yyyy-mm-dd ~ q{ } ~ .hh-mm-ss }\
andthen $_, *.later(:5minute) ... * eqv $dt.later(:1day)  
andthen .rotor: 2 => -1 
andthen .map: *.join(q{, }).put
Run Code Online (Sandbox Code Playgroud)