比较Perl中的日期格式

时间:2014-05-16 01:53:23

标签: perl

我想在Perl中比较不同的日期格式,如:

Date :-20140511062730Z 

比较
Date :- 11-MAY-2014

如果这两种格式都在一个文件中并且需要在不同的文件中提取它们,请建议我们如何比较它们。

档案数据是: -

dn:uid = 501553930,ou = worker,dc = tfayd,dc = com modifytimestamp:20140511062730Z effectiveenddate:2014年5月11日

此用户具有相同的日期格式,因此应该放在same_date_logs

dn:uid = 501909342,ou = worker,dc = tfayd,dc = com modifytimestamp:20140611062730Z effectiveenddate:2013年5月11日

此用户具有不同的日期格式,因此应该使用different_date_logs

将modifytimestamp与每条记录的effectiveenddate进行比较。文件包含1L记录。

2 个答案:

答案 0 :(得分:1)

通过比较日期格式并不清楚你的意思,但这对你有帮助。

使用Time::Piece模块strptime来解析不同的日期/时间格式,您可以生成可以直接比较的一致对象。

use strict;
use warnings;

use Time::Piece;

my $t1 = Time::Piece->strptime('20140511062730Z', '%Y%m%d%H%M%SZ');
my $t2 = Time::Piece->strptime('11-MAY-2014', '%d-%b-%Y');

printf "%s is %s than %s\n", $t1, $t1 < $t2 ? 'earlier' : 'later', $t2;

<强>输出

Sun May 11 06:27:30 2014 is later than Sun May 11 00:00:00 2014

答案 1 :(得分:1)

此解决方案是否满足您的需求?借用Time :: Piece。

借用 Borodin
#!/usr/bin/perl
use strict;
use warnings;
use Time::Piece;

open my $same, '>', 'same_date_logs' or die $!;
open my $diff, '>', 'diff_date_logs' or die $!;

while (<DATA>) {
    my ($modtimestamp) = /modifytimestamp: (\d{8})/;
    my ($effectiveend) = /effectiveenddate: (\d\d-[A-Z]{3}-\d{4})/;

    my $mod_date = Time::Piece->strptime($modtimestamp, '%Y%m%d%');
    my $end_date = Time::Piece->strptime($effectiveend, '%d-%b-%Y');

    if ($mod_date == $end_date) {
        print $same $_;
    }
    else {
        print $diff $_;
    }
}
close $same or die $!;
close $diff or die $!;

__DATA__
dn: uid=501553930,ou=worker,dc=tfayd,dc=com modifytimestamp: 20140511062730Z effectiveenddate: 11-MAY-2014
dn: uid=501909342,ou=worker,dc=tfayd,dc=com modifytimestamp: 20140611062730Z effectiveenddate: 11-MAY-2013

打印到2个文件(下面)

C:\Old_Data\perlp>type same_date_logs
dn: uid=501553930,ou=worker,dc=tfayd,dc=com modifytimestamp: 20140511062730Z effectiveenddate: 11-MAY-2014

C:\Old_Data\perlp>type diff_date_logs
dn: uid=501909342,ou=worker,dc=tfayd,dc=com modifytimestamp: 20140611062730Z effectiveenddate: 11-MAY-2013