2010-08-05 38 views
0

我需要一些帮助,试图找出如何在perl中格式化日期。我有一个工作perl脚本,用正则表达式,如果我使用硬编码的日期字符串像这样的正常工作:perl帮助找到正确的日期格式

my $mon = 'Aug'; 
my $day = '05'; 
my $year = '2010'; 

这些增值经销商在正则表达式中使用这样的:

if ($line =~ m/(.* $mon $day) \d{2}:\d{2}:\d{2} $year: ([^:]+):backup:/) 

现在,我需要自动化这段代码的日期部分,并系统地使用当前日期。 我看着perl本地时间,并尝试使用unix日期并将它们放入变量。 我需要让星期几,单个数字填充'0'。就像今天'Aug''05' '2010'一样,因为我用于正则表达式的输入文件具有这样的日期。

我的第二次尝试与UNIX和格式化返回的数字,但我需要他们是字符串:

my $mon2=`date '+%b'`; 
my $day2=`date '+%d'`; 
my $year2=`date '+%Y'`; 

与日期格式播放我的测试代码:

#!/usr/local/bin/perl -w 

use strict; 

my $mon = 'Aug'; 
my $day = '05'; 
my $year = '2010'; 

my $mon2=`date '+%b'`; 
my $day2=`date '+%d'`; 
my $year2=`date '+%Y'`; 

print "$mon"; 
print "$day"; 
print "$year"; 

print "$mon2"; 
print "$day2"; 
print "$year2"; 

我的输出:

Aug052010Aug 
05 
2010 

回答

6

我不想把它打破给你,但你正在重新发明轮子。所有这一切都是在DateTime分布实施的非常全面和DateTime::Format::类家族:

use DateTime; 
my $dt = DateTime->now; 
print 'It is currently ', $dt->strftime('%b %d %H:%M:%S'), ".\n"; 

打印:

 
It is currently Aug 05 23:54:01. 
+4

如果你不想安装日期时间由于某种原因(尽管它的真棒)你可以在标准的'POSIX'模块中使用'strftime'函数。 – friedo 2010-08-06 00:30:46

+0

谢谢你们!非常有用的信息。 – jdamae 2010-08-06 01:55:20