如何检查PERL中日期是否格式相同?

时间:2016-01-07 20:19:59

标签: perl

我有一个.csv文件。 第二列是日期。

日期可能格式不同。

如何检查以确定它们是否采用相同的格式,或者我是否可以使用某种方法将所有日期更改为1种特定格式?

2 个答案:

答案 0 :(得分:1)

例如,16/10/2013 == 04/09 / 2014是真的吗? - 运纬郝

如果您处理的日期看起来像01/01/20015那么这是美国的方式,将月份放在第一位,而世界其他地方则将第一天放在第一位

除非你确切知道这些字段的含义或者当天是否大于12,否则无法区分这两者,所以03/07/2015可能是7月的三分之一或三月的七分之一,但12/13/2015必须是2015年12月的第13期

您需要咨询您的数据提供商以解决此问题

答案 1 :(得分:-3)

如果您可以安装DateTime模块,这应该可行。您可以添加任何所需的格式。 您可能遇到的问题很少。你需要特殊的逻辑来处理mmddyy和yymmdd。

#!/usr/bin/perl

use strict;
use warnings;
use DateTime;

my $date1 = '2016-01-07';
my $date2 = '02/07/2016';

$date1 = parseDate($date1)->mdy('/');
$date2 = parseDate($date2)->mdy('/');

print "Date 1: $date1\n";
print "Date 2: $date2\n";

sub parseDate {
    my ($date) = @_;
    my ($year, $month, $day);
    if($date =~ /^(\d{4})-(\d{2})-(\d{2})$/) { #yyyy-mm-dd
        ($year, $month, $day) = ($1, $2, $3);
    }
    elsif($date =~ /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/) { #mm/dd/yyyy
        ($year, $month, $day) = ($3, $1, $2);
    }
    elsif($date =~ /^(\d{4})(\d{2})(\d{2})$/) { #yyyymmdd
        ($year, $month, $day) = ($1, $2, $3);
    }
    else {
        die "Date format is unknown: $date";
    }
    $date = DateTime->new(
        year    => $year,
        month   => $month,
        day => $day,
    );
    return $date;
}