Perl поможет найти правильный формат даты - PullRequest
0 голосов
/ 06 августа 2010

Мне нужна помощь, чтобы понять, как форматировать даты в 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 localtime и попытался использовать unix date и бросить их в переменные. Мне нужно, чтобы дни недели, состоящие из одной цифры, были дополнены 0. Как и сегодня, «Авг» 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

1 Ответ

6 голосов
/ 06 августа 2010

Я ненавижу ломать это тебе, но ты изобретаешь колесо.Все это достаточно полно реализовано в дистрибутиве 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.
...