2014-07-20 141 views
0

我有一个包含值“20140720”的变量。我需要将其更改为“20/07”格式。用Perl格式化日期格式

我的代码如下所示。

#!/usr/bin/perl 

use strict; 
use warnings; 
use Time::Piece; 

my $date = '20140720'; 

my $date_format = Time::Piece->strptime($date, '%d/%m'); 
my $new_date = $date_format->strftime('%d/%m'); 
print $new_date; 

我在执行过程中遇到以下错误。

错误解析时间/usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/Time/Piece.pm线470

回答

5

在这一行 - Time::Piece->strptime($date, '%d/%m'); - 你指定$date当前在中的格式不正确。第二个参数描述了应该如何解析字符串,而不是你想要的格式(这是下面这行代码)。

改为使用'%Y%m%d'

2

如果不需要进一步的数据处理,使用简单的正则表达式可以更简单:

use strict; 
use warnings; 

my $date = '20140720'; 
my $new_date = $date; 
$new_date =~ s!\d{4}(\d{2})(\d{2})$!$2/$1!; 

print $new_date, "\n"; 
+0

也许。但我怀疑它:-) –

3

有了一个固定的字符串,你应该使用pack/​​功能:

use strict; 
use warnings; 

my $date = '20140720'; 

my (undef, $m, $d) = unpack 'A4A2A2', $date; 

print "$d/$m"; 
+0

使用日期/时间字符串,你应该使用日期/时间解析器:-) –