Perl中的日期格式转换

时间:2016-03-29 10:17:00

标签: regex perl date

对Perl来说,我需要帮助以达到以下要求并使用日期格式转换。

输入日期值 - > 1/2/2015(即d / m / yyyy)

输出日期值 - > 2015-02-01(即yyyy-mm-dd)

到目前为止我尝试的是, 如果日期或月份值是单个数字,首先提取数据,月份和年份值并执行正确的格式设置,如填充零(0)

$time = join '-', sprintf('%02d', substr ('1/2/2015'.'0'x2,0,4)) =~ /../g;
printf $time;

并将这些值与-连接起来以获得输出。有没有更好的方法来实现这一目标?

提前致谢

2 个答案:

答案 0 :(得分:1)

更好的方法是使用专为日期解析和格式设计的模块,例如Time::PieceDateTime

use strict;
use warnings;
use 5.010;

use Time::Piece;

my $str = '1/2/2015';
my $tp  = Time::Piece->strptime($str, '%m/%d/%Y');

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

输出:

2015-01-02

答案 1 :(得分:0)

你真的不需要正则表达式。这样做可以解决问题,但您需要确保输入格式始终为d/m/yyyy

my ( $d, $m, $y ) = split( '/', '1/2/2015' );
my $ymd = sprintf( '%d-%02d-%02d', $y, $m, $d );
print $ymd; # OUTPUT: 2015-02-01

如果你想在一行中完成(并且同时使你的代码可读性降低),你可以这样做....虽然我通常不会推荐它。

print join( '-', reverse map { sprintf( '%02d', $_ ) } split( '/', '1/2/2015' ) );

您可以通过删除所有圆括号()和大多数空格来压缩此行,但这会进一步影响此表达式的可读性。