在 perl 中打印 strfitime
print strfitime in perl
这是我当前的代码:
print "<td class=resa>@res[$i]->{'signupdate'}</td></tr>\n";
我想将变量 @res[$i]->{'signupdate'}
修改为 格式化日期 。该变量的数据是 201710130915
。
我试过:
use POSIX qw(strftime);
my $date=strftime('%Y-%m-%d',@res[$i]->{'signupdate'});
print "<td class=resa>$date</td></tr>\n";
有什么建议吗?
您拥有的数据看起来像是日期的字符串表示形式。
YYYYMMDDhhmm
201710130915
因此可以很容易地用模式匹配解构它并以不同的格式放回原处。
my $time = "201710130915";
my ($year, $month, $day) = $time =~ m/^(....)(..)(..)/;
my $date = sprintf '%d-%02d-%02d', $year, $month, $day;
print $date;
这将打印
2017-10-13
我猜你 运行 这个代码没有 use strict
和 use warnings
。有了你代码中的那些(你应该总是在你的代码中包含它们)你会得到一个非常明确的警告。
你的代码基本上是这样的:
#!/usr/bin/perl
use strict;
use warnings;
use POSIX 'strftime';
my $input = '201710130915';
my $date = strftime('%Y-%m-%d', $input);
print $date;
并且 运行 给出了这个:
Usage: POSIX::strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1)
您使用 strftime()
的直觉很好。但是你需要给它正确的输入。你给它一个 date/time 字符串。实际上,它需要所有不同 date/time 值的单独输入。实际上,它需要 localtime()
.
返回的值列表
您可以创建一个数组,以正确的方式调整它们,然后以正确的顺序传递该数组的位:
#!/usr/bin/perl
use strict;
use warnings;
use POSIX 'strftime';
my $input = '201710130915';
my @date_bits = $input =~ /(....)(..)(..)(..)(..)/;
$date_bits[0] -= 1900;
$date_bits[1]--;
# The zero is for seconds.
my $date = strftime('%Y-%m-%d', 0, reverse @date_bits);
print $date;
但是,坦率地说,到那时您最好将其视为文本操作问题。
#!/usr/bin/perl
use strict;
use warnings;
use POSIX 'strftime';
my $input = '201710130915';
my $date = join '-', $input =~ /^(....)(..)(..)/;
print $date;
这是我当前的代码:
print "<td class=resa>@res[$i]->{'signupdate'}</td></tr>\n";
我想将变量 @res[$i]->{'signupdate'}
修改为 格式化日期 。该变量的数据是 201710130915
。
我试过:
use POSIX qw(strftime);
my $date=strftime('%Y-%m-%d',@res[$i]->{'signupdate'});
print "<td class=resa>$date</td></tr>\n";
有什么建议吗?
您拥有的数据看起来像是日期的字符串表示形式。
YYYYMMDDhhmm
201710130915
因此可以很容易地用模式匹配解构它并以不同的格式放回原处。
my $time = "201710130915";
my ($year, $month, $day) = $time =~ m/^(....)(..)(..)/;
my $date = sprintf '%d-%02d-%02d', $year, $month, $day;
print $date;
这将打印
2017-10-13
我猜你 运行 这个代码没有 use strict
和 use warnings
。有了你代码中的那些(你应该总是在你的代码中包含它们)你会得到一个非常明确的警告。
你的代码基本上是这样的:
#!/usr/bin/perl
use strict;
use warnings;
use POSIX 'strftime';
my $input = '201710130915';
my $date = strftime('%Y-%m-%d', $input);
print $date;
并且 运行 给出了这个:
Usage: POSIX::strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1)
您使用 strftime()
的直觉很好。但是你需要给它正确的输入。你给它一个 date/time 字符串。实际上,它需要所有不同 date/time 值的单独输入。实际上,它需要 localtime()
.
您可以创建一个数组,以正确的方式调整它们,然后以正确的顺序传递该数组的位:
#!/usr/bin/perl
use strict;
use warnings;
use POSIX 'strftime';
my $input = '201710130915';
my @date_bits = $input =~ /(....)(..)(..)(..)(..)/;
$date_bits[0] -= 1900;
$date_bits[1]--;
# The zero is for seconds.
my $date = strftime('%Y-%m-%d', 0, reverse @date_bits);
print $date;
但是,坦率地说,到那时您最好将其视为文本操作问题。
#!/usr/bin/perl
use strict;
use warnings;
use POSIX 'strftime';
my $input = '201710130915';
my $date = join '-', $input =~ /^(....)(..)(..)/;
print $date;