2010-08-19 10 views
1

Я читала в каротажных данных с помощью следующего временного формата штемпеля:perl- помощь форматирования метки времени

Sat Aug 07 04:42:21 2010 

Я хочу, чтобы преобразовать его в нечто вроде этого:

20100807044221 

Что является лучшим способ сделать это в perl? Благодарю.

ответ

2

Date::Parse может не быть установленных на всех ваших системах, поэтому вы можете использовать следующий фрагмент:


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

Спасибо, что отлично работает. Да, нет Date :: Parse. Использование localtime в первую очередь для поиска по дате. – jdamae

+0

Не помогает с парсинговой частью вопроса. – mscha

2

Это то, что для Date::Parse для.

Вы указываете язык и соответствующий формат даты, как (скопированный из документации):

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

выше вернется «эпоха» значение, значение времени AKA Unix (что вам нужно).

Редактировать: в отношении вашего сообщения вам нужна только каноническая строка даты, например yyyy-mmm-ddd и т. Д., Поэтому вы можете вызвать POSIX :: strftime для этого. Кроме того, ваш формат даты по умолчанию, так что вам не нужен язык вызов:

... 
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"; 
... 

Результат:

20100807024221 

С уважением

БВУ

+1

Я думал, что он хотел эпоху на первый тоже, но на самом деле он ищет YYYYMMDDhhmmss – cam

+0

@cam: Спасибо, я пропустил, что (и отредактирован проводки). –

1

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

никогда не возражаете, вам нужно разобрать его первым. который просто распечатает его в вашем формате.

5

Использование Time::Piece. (. Основной модуль, так как 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');