my$str= '4/25/10';
my$sr = join(' ',split (/\//,$str));
#my$s = sprintf '%3$d %2$d %1$d',$srt;
print$sr,"\n";
输出:
4 25 10
但我希望输出像2010-25-04
。任何人都可以建议我如何显示我的欲望输出。给我你的建议
你的答案会很明显。
答案 0 :(得分:2)
嗯,脑死亡解决方案可能是:
my @date = split( /\//,$str)
printf("%04d-%02d-%02d", $date[2] + 2000, $date[1], $date[0]);
您可以通过突出显示您希望年,月和日的内容来编写更多自我记录的内容,如下所示:
my ($day, $month, $year) = split /\//, $str;
printf("%04d-%02d-%02d", $year + 2000, $month, $day);
答案 1 :(得分:2)
你不是那么遥远。
您可以保留单个变量以更好地处理数据,而不是在单个操作中拆分和连接:
my ($d,$m,$y) = split /\//, $str;
然后您可以以任何方式对其进行格式化,例如:
printf "20%02d-%02d-%02d\n", $y, $d, $m;
但有几点说明:
答案 2 :(得分:1)
use DateTime::Format::Strptime;
my $strp = DateTime::Format::Strptime->new(
pattern => '%m/%d/%y',
locale => 'en_US'
);
my $dt = $strp->parse_datetime('4/25/10');
print $dt->strftime('%Y-%d-%m'), "\n";
给出:
2010-25-04
答案 3 :(得分:1)
无需为此DateTime做。多年来,Time::Piece已包含在Perl核心发行版中。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Time::Piece;
my $date = '4/25/10';
my $date_tp = Time::Piece->strptime($date, '%m/%d/%y');
say $date_tp->strftime('%Y-%m-%d');