perl- помогите форматировать отметку времени - PullRequest
1 голос
/ 20 августа 2010

Я читаю данные журнала со следующим форматом отметки времени:

Sat Aug 07 04:42:21 2010

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

20100807044221

Каков наилучший способ сделать это в Perl? Спасибо.

Ответы [ 4 ]

5 голосов
/ 20 августа 2010

Использование Время :: Кусок .(Базовый модуль начиная с 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');
2 голосов
/ 20 августа 2010

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

2 голосов
/ 20 августа 2010

Это то, для чего Дата :: Parse .

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

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

Выше будет возвращено значение "эпохи", значение времени 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 голос
/ 20 августа 2010

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

не берите в голову, вам нужно сначала разобрать его.это просто распечатает в вашем формате.

...