Perl函数有问题。这很简单但无论如何..。不知道是什么问题。
sub encode_date
{
$date = $_[0];
$day = substr($date, 0, 2);
$month = substr($date, 2, 2);
$year = substr($date, 6, 4);
return "$year-$month-$day";
}子接受"DD.MM.YYYY“格式化字符串,并必须将其转换为”YYYY DD“格式。
输入: 09.09.1993
输出: 0-09-93-19?
有人能解释一下是怎么回事吗。
p.s.:我为解码日期(从‘yyyy’到'dd.mm.yyyy')写了另一个子,所有的都正常工作。
sub decode_date
{
$date = $_[0];
$year = substr $date, 0, 4;
$month = substr $date, 5, 2;
$day = substr $date, 8, 2;
return $day.".".$month.".".$year;
}当然,我尝试了substr $date, 0, 2;和substr($date, 0, 2);以及返回值的不同组合。
发布于 2014-01-12 07:54:30
月份开始于索引3,而不是2。
sub encode_date
{
my ($date) = @_;
my $day = substr($date, 0, 2);
my $month = substr($date, 3, 2);
my $year = substr($date, 6, 4);
return "$year-$month-$day";
}也许更好的方法是用非数字(.)、反向数字来分割字符串,然后用破折号( dash - )将它们连接起来。
sub encode_date
{
my ($date) = @_;
return join "-", reverse split /\D/, $date;
}发布于 2014-01-12 07:56:02
你的问题是,你的偏移是错误的,因为它们没有考虑到分离器。(例如,月份以偏移量3开始,而不是以2开始,因为它是在两个字符的日期之后加上一个句点。)
尽管如此,我认为编写此函数的最佳方法是:
sub encode_date($) {
if ($_[0] =~ /^(\d\d)\.(\d\d)\.(\d{4})$/) {
return "$3-$2-$1";
}
}发布于 2014-01-12 07:57:28
sub encode_date
{
$date = $_[0];
$day = substr($date, 0, 2);
$month = substr($date, 3, 2);
$year = substr($date, 6, 4);
return "$year-$month-$day";
}有两个问题。
我使用了encode_date(encode_date($date)); (2次)
另一个是$month = substr($date, 2, 2);正确的是$month = substr($date, 3, 2);
https://stackoverflow.com/questions/21072478
复制相似问题