perl帮助找到合适的日期格式

jda*_*mae 0 perl datetime date

我需要一些帮助,试图弄清楚如何格式化perl中的日期.我有一个工作的perl脚本,带有正则表达式,如果我使用这样的硬编码日期字符串,它可以正常工作:

my $mon = 'Aug';
my $day = '05';
my $year = '2010';
Run Code Online (Sandbox Code Playgroud)

这些变量用于正则表达式,如下所示:

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

现在,我需要自动化代码的这个日期部分并系统地使用当前日期.我查看了perl localtime并尝试使用unix date并将它们放入变量中.我需要有一周的日子,单个数字,用'0'填充.和今天一样,'Aug''05''2010'因为我用于正则表达式的输入文件的日期是这样的.

我第二次尝试使用unix和格式化返回数字,但我需要将它们作为字符串:

 my $mon2=`date '+%b'`;
 my $day2=`date '+%d'`;
 my $year2=`date '+%Y'`;
Run Code Online (Sandbox Code Playgroud)

我使用日期格式的测试代码:

#!/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";
Run Code Online (Sandbox Code Playgroud)

我的输出:

Aug052010Aug
05
2010
Run Code Online (Sandbox Code Playgroud)

Eth*_*her 6

我讨厌打破它,但你正在重新发明轮子.所有这些都在DateTime发行版和DateTime :: Format ::系列类中非常全面地实现:

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

打印:

It is currently Aug 05 23:54:01.

  • 如果您不想出于某种原因安装DateTime(即使它很棒),您可以在标准的`POSIX`模块中使用`strftime`函数. (4认同)