【问题标题】:perl - formatting DateTime outputperl - 格式化日期时间输出
【发布时间】:2011-11-28 18:51:11
【问题描述】:

如何使用 DateTime 转换我的回报:

This is my date:2011-11-26T20:11:06This is my date:20111126

使用此现有代码:

use DateTime qw();
my $dt3 = DateTime->now->subtract(days => 1);
print "This is my date:$dt3\n"

【问题讨论】:

    标签: perl datetime


    【解决方案1】:

    ymd是最简单的:

    print "This is my date: ", $dt3->ymd(''), "\n";
    

    strftime 更通用:

    print "This is my date: ", $dt3->strftime('%Y%m%d'), "\n";
    

    您还可以使用特定(例如DateTime::Format::Atom)和一般(例如DateTime::Format::Strptime)格式帮助工具:

    use DateTime::Format::Strptime qw( );
    my $format = DateTime::Format::Strptime->new( pattern => '%Y%m%d' );
    print "This is my date: ", $format->format_datetime($dt3), "\n";
    

    PS — 您的代码将给出英格兰境内或附近的日期,而不是您所在的日期。为此,你想要

    my $dt3 = DateTime->now(time_zone => 'local');
    

    或者更合适的

    my $dt3 = DateTime->today(time_zone => 'local');
    

    【讨论】:

      【解决方案2】:

      只需在第二行添加->ymd("")。参数""是分隔符,你选择的是空字符串。

      use DateTime qw();
      my $dt3 = DateTime->now->subtract(days => 1)->ymd("");
      print "This is my date:$dt3\n"
      

      【讨论】:

        【解决方案3】:

        在 Perl 中有十几种处理日期的方法。但是,如果您知道日期字符串的格式,则可能没有理由调用日期时间模块:

        $dt3 =~ /^(\d+)-(\d+)-(\d+)/;
        print "This is my date:${1}${2}${3}\n";
        

        我不熟悉 DateTime,但如果在显示数据时无法格式化数据,我会感到惊讶。

        我个人更喜欢 Time::PieceTime::Seconds 来处理这些事情。自 5.10 以来,这些模块已成为标准 Perl 安装的一部分。另外,我发现界面相当简单干净。

        use Time::Piece;
        use Time::Seconds;
        
        my $time = localtime;
        $time -= ONE_DAY;
        
        print "This is my date:" . $time->ymd("");
        

        由于某种原因,您不能在同一行上说 $time = localtime - ONE_DAY;。我想您需要先创建 Time::Piece 对象,然后才能使用 Time::Second 常量操作它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-08-05
          • 1970-01-01
          • 2017-06-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多