加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何使用Perl的DateTime获取本月的第一天和最后一天?

发布时间:2020-12-15 22:00:16 所属栏目:大数据 来源:网络整理
导读:有没有办法找出月的第一天(最小日)和一个月的最后一天(最大日),给定月份作为输入,使用Perl中的DateTime? 到目前为止,我想出了如何通过第一个日期,最后一天给我一系列的日子. 但是现在我想做的只是一个月的时间,就像201203一样,返回最后一个maxday. 是否可以
有没有办法找出月的第一天(最小日)和一个月的最后一天(最大日),给定月份作为输入,使用Perl中的DateTime?

到目前为止,我想出了如何通过第一个日期,最后一天给我一系列的日子.

但是现在我想做的只是一个月的时间,就像201203一样,返回最后一个maxday.

是否可以使用DateTime?

此外,我想将日期格式掩码从YYYYMMDD更改为YYYY-MM-DD.

use strict;
    use warnings;
    use DateTime;

    unless(@ARGV==2)
    {
        print "Usage: myperlscript first_date last_daten";
        exit(1);
    }

    my ($first_date,$last_date)=@ARGV;

    my $date=DateTime->new(
    {
      year=>substr($first_date,4),month=>substr($first_date,4,2),day=>substr($first_date,6,2)
    });


while($date->ymd('') le $last_date)
{
  print $date->ymd('') . "n";
  #$date->add(days=>1); #every day
  $date->add(days=>30);
}

预期成绩:

2012-03-01
2012-03-31

解决方法

DateTime为你做了最新数学.你可以告诉你要使用哪个字符作为分隔符:
use DateTime;

my( $year,$month ) = qw( 2012 2 );

my $date = DateTime->new(
    year  =>  $year,month => $month,day   => 1,);

my $date2 = $date->clone;

$date2->add( months => 1 )->subtract( days => 1 );

say $date->ymd('-');
say $date2->ymd('-');

在“Last day of the month. Any shorter”的Perlmonks有很多例子,我发现谷歌“perl datetime last day of month”.

这是一个Time::Moment的例子.这是一个更精简,更快的DateTime子集:

use v5.10;
use Time::Moment;

my( $year,$month ) = qw( 2012 2 );

my $tm = Time::Moment->new(
    year  =>  $year,);

my $tm2 = $tm->plus_months( 1 )->minus_days( 1 );

say $tm->strftime('%Y-%m-%d');
say $tm2->strftime('%Y-%m-%d');

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读