我怎样才能在Perl中获得本周的日期?
发布时间:2020-12-15 21:58:45 所属栏目:大数据 来源:网络整理
导读:我有以下循环来计算当前周的日期并打印出来.它有效,但我在Perl的日期/时间可能性游泳,想要了解是否有更好的方法.这是我写的代码: #!/usr/bin/env perluse warnings;use strict;use DateTime;# Calculate numeric value of today and the # target day (Mond
我有以下循环来计算当前周的日期并打印出来.它有效,但我在Perl的日期/时间可能性游泳,想要了解是否有更好的方法.这是我写的代码:
#!/usr/bin/env perl use warnings; use strict; use DateTime; # Calculate numeric value of today and the # target day (Monday = 1,Sunday = 7); the # target,in this case,is Monday,since that's # when I want the week to start my $today_dt = DateTime->now; my $today = $today_dt->day_of_week; my $target = 1; # Create DateTime copies to act as the "bookends" # for the date range my ($start,$end) = ($today_dt->clone(),$today_dt->clone()); if ($today == $target) { # If today is the target,"start" is already set; # we simply need to set the end date $end->add( days => 6 ); } else { # Otherwise,we calculate the Monday preceeding today # and the Sunday following today my $delta = ($target - $today + 7) % 7; $start->add( days => $delta - 7 ); $end->add( days => $delta - 1 ); } # I clone the DateTime object again because,for some reason,# I'm wary of using $start directly... my $cur_date = $start->clone(); while ($cur_date <= $end) { my $date_ymd = $cur_date->ymd; print "$date_ymdn"; $cur_date->add( days => 1 ); } 如上所述,这是有效的,但它是最快还是最有效的?我猜测速度和效率可能不一定在一起,但您的反馈非常感谢. 解决方法
friedo的答案略有改进……
my $start_of_week = DateTime->today() ->truncate( to => 'week' ); for ( 0..6 ) { print $start_of_week->clone()->add( days => $_ ); } 但是,这假设星期一是一周的第一天.星期天,从…开始 my $start_of_week = DateTime->today() ->truncate( to => 'week' ) ->subtract( days => 1 ); 无论哪种方式,最好使用truncate方法而不是重新实现它,就像friedo所做的那样;) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |