对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;
并将这些值与-
连接起来以获得输出。有没有更好的方法来实现这一目标?
提前致谢
答案 0 :(得分:1)
更好的方法是使用专为日期解析和格式设计的模块,例如Time::Piece或DateTime。
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' ) );
您可以通过删除所有圆括号()
和大多数空格来压缩此行,但这会进一步影响此表达式的可读性。