【问题标题】:perl- help formatting a timestampperl - 帮助格式化时间戳
【发布时间】:2010-08-19 20:34:28
【问题描述】:

我正在读取具有以下时间戳格式的日志数据:

Sat Aug 07 04:42:21 2010

我想把它转换成这样的:

20100807044221

在 perl 中最好的方法是什么?谢谢。

【问题讨论】:

    标签: perl time date-format localtime


    【解决方案1】:

    使用Time::Piece。 (自 Perl 5.10 以来的核心模块。)

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    use Time::Piece;
    
    my $timestamp1 = 'Sat Aug 07 04:42:21 2010';
    my $time = Time::Piece->strptime($timestamp1, '%a %b %d %H:%M:%S %Y');
    my $timestamp2 = $time->strftime('%Y%m%d%H%M%S');
    

    【讨论】:

      【解决方案2】:

      Date::Parse 可能不会安装在您的所有系统上,因此您可能需要使用以下 sn-p:


      my ($sec, $min, $hour, $mday, $mon, $year) = localtime();
      
      my $timestamp = sprintf( "%04d%02d%02d%02d%02d%02d",
                                $year+1900, $mon+1, $mday, $hour, $min, $sec);
      
      print("Timestamp: $timestamp\n");
      

      Timestamp: 20100819135418

      【讨论】:

      • 谢谢,效果很好。是的,没有 Date::Parse。主要使用本地时间进行日期查找。
      • 不过,对问题的解析部分没有帮助。
      【解决方案3】:

      这就是Date::Parse 的用途。

      您指定语言和相应的日期格式,例如(从文档中复制):

              $lang = Date::Language->new('German');
              $lang->str2time("25 Jun 1996 21:09:55 +0100");
      

      上面将返回“epoch”值,AKA unix 时间值(你需要的)。

      编辑:关于您的帖子,您只需要像 yyyy-mmm-ddd 等规范的日期字符串,因此您可以为此调用 POSIX::strftime。此外,您的日期格式是默认,因此您不需要语言调用:

      ...
      use Date::Parse;
      use POSIX qw(strftime);
      
      my $sec = str2time('Sat Aug 07 04:42:21 2010');
      my $ymd = strftime "%Y%m%d%H%M%S", gmtime($sec);
      
      print "$ymd\n";
      ...
      

      结果:

      20100807024221
      

      问候

      rbo

      【讨论】:

      • 一开始我以为他也想要那个纪元,但他实际上是在寻找YYYYMMDDhhmmss
      【解决方案4】:

      perl -MPOSIX -le'print strftime "%Y%m%d%H%M%S", localtime'

      没关系,你需要先解析它。那只会以您的格式打印出来。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-10
        • 2019-02-17
        • 1970-01-01
        • 2020-11-21
        • 2012-03-20
        • 1970-01-01
        相关资源
        最近更新 更多