【发布时间】:2013-12-20 08:14:53
【问题描述】:
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 这样的输出。谁能建议我如何显示我的愿望输出。给我你的建议
你的答案将是可观的。
【问题讨论】:
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 这样的输出。谁能建议我如何显示我的愿望输出。给我你的建议
你的答案将是可观的。
【问题讨论】:
好吧,一个脑残的解决方案可能是:
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);
【讨论】:
离你不远了。
您可以保留单个变量以更好地处理数据,而不是在单个操作中进行拆分和连接:
my ($d,$m,$y) = split /\//, $str;
然后你可以用任何你喜欢的方式来格式化它,例如:
printf "20%02d-%02d-%02d\n", $y, $d, $m;
不过有几点说明:
【讨论】:
02?请告诉我
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
【讨论】:
use DateTime::Format::Strptime; 是什么意思我不知道,因为我还是初学者。你能解释一下这样做的目的吗?
can't locate dateTime/formates/strptcime.pm in @INC (@inc contain:./usr/local/lib64/perl5/usr/local/share/perl5/usr/lib64/perl5vendor_perl/usr/share/perl5/vendor_perl/usr/lib64/perl5/usr/share/perl5.).的错误
不需要为此对 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');
【讨论】:
cpan有什么用?它在编写程序时有何帮助