2010-08-19 8 views
1

Je lis dans les données du journal avec le format de l'horodatage suivant:aide Perl- le formatage d'un horodatage

Sat Aug 07 04:42:21 2010 

Je veux le convertir en quelque chose comme ceci:

20100807044221 

Quel est le meilleur façon de le faire en Perl? Merci.

Répondre

2

Date::Parse peuvent ne pas être installé sur tous vos systèmes, vous pouvez donc utiliser l'extrait suivant:


my ($sec, $min, $hour, $mday, $mon, $year) = localtime(); 

my $timestamp = sprintf("%04d%02d%02d%02d%02d%02d", 
          $year+1900, $mon+1, $mday, $hour, $min, $sec); 

print("Timestamp: $timestamp\n"); 

Timestamp: 20100819135418

+0

Merci, ça marche très bien. Oui, non Date :: Parse. Utilisation de localtime principalement pour les recherches de date. – jdamae

+0

Ne pas aider avec la partie analyse de la question, cependant. – mscha

2

C'est ce que Date::Parse est pour.

Vous spécifiez la langue et le format de date correspondante, comme (copié à partir de la documentation):

 $lang = Date::Language->new('German'); 
     $lang->str2time("25 Jun 1996 21:09:55 +0100"); 

ci-dessus retournera valeur "époque", AKA valeur temps unix (ce dont vous avez besoin).

Modifier: en ce qui concerne votre publication, vous n'avez besoin que de la chaîne de date canonique comme aaaa-mmm-ddd etc., vous pouvez donc utiliser POSIX :: strftime pour cela. De plus, le format de date est par défaut, vous aurez donc pas besoin de l'appel langue:

... 
use Date::Parse; 
use POSIX qw(strftime); 

my $sec = str2time('Sat Aug 07 04:42:21 2010'); 
my $ymd = strftime "%Y%m%d%H%M%S", gmtime($sec); 

print "$ymd\n"; 
... 

Résultat:

20100807024221 

Cordialement

RBO

+1

Je pensais qu'il voulait l'époque d'abord trop, mais il est en fait la recherche AAAAMMJJhhmmss – cam

+0

@cam: Merci, j'ai manqué que (et modifié l'affichage). –

1

perl -MPOSIX -le'print strftime "%Y%m%d%H%M%S", localtime'

never mind, vous devez analyser en premier. ça va l'imprimer dans votre format.

5

Utilisez Time::Piece. (. Module de base depuis Perl 5,10)

#!/usr/bin/perl 

use strict; 
use warnings; 

use Time::Piece; 

my $timestamp1 = 'Sat Aug 07 04:42:21 2010'; 
my $time = Time::Piece->strptime($timestamp1, '%a %b %d %H:%M:%S %Y'); 
my $timestamp2 = $time->strftime('%Y%m%d%H%M%S');