2010-08-05 7 views
0

J'ai besoin d'aide pour essayer de formater les dates en Perl. J'ai un script Perl de travail, avec une expression régulière, qui fonctionne très bien si j'utiliser des chaînes de date pré-programmée comme ceci:perl aide trouver le format de date correct

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

Ces vars sont utilisés dans une expression régulière comme ceci:

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

Maintenant, j'ai besoin d'automatiser cette partie du code et d'utiliser systématiquement la date du jour. J'ai regardé dans perl localtime et j'ai essayé d'utiliser unix date et les jeter dans les variables. Je dois avoir les jours de la semaine, un seul chiffre, être rembourré avec '0'. Comme aujourd'hui, 'Aug' '05' '2010' car le fichier d'entrée que j'utilise pour la regex a des dates comme celle-ci.

Mon 2ème essai avec le unix et la mise en forme est le nombre de retour, mais je dois les avoir être des chaînes:

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

Mon code de test pour jouer avec les formats de date:

#!/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"; 

Ma sortie :

Aug052010Aug 
05 
2010 

Répondre

6

Je déteste vous le casser, mais vous réinventez la roue. Tout cela est mis en œuvre tout à fait globalement dans la distribution DateTime et la famille DateTime::Format:: des classes:

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

impressions:

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

Et si vous ne voulez pas installer DateTime pour une raison quelconque (même si elle est génial) vous pouvez utiliser la fonction 'strftime' dans le module' POSIX' standard. – friedo

+0

Merci les gars! Informations très utiles. – jdamae