2015-08-27 3 views
2

Мне нужно разобрать некоторую строку времени, которая поставляется в формате ddmmyyyyhhmmssXXX. Часть XXX - миллисекунда. В приведенном ниже коде Im игнорирует миллисекунду. Он работает, но я получаю сообщение об ошибке:Perl strptime parse millisecond

garbage at end of string in strptime: 293 at /usr/local/lib64/perl5/Time/Piece.pm line 482. 

Какой правильный формат я должен использовать.

$time = '11032014182819802'; 
$format = '%d%m%Y%H%M%S'; 
$t = Time::Piece->strptime($time, $format); 
+0

Что вы хотите сделать с миллисекунды? Просто игнорируйте их? Используйте их для округления поля секунд? Или что-то другое? – Borodin

+0

Я вычисляю разницу между двумя временами. В большинстве случаев это нормально, если разница в секундах. Но в особых случаях мне может понадобиться разница и в миллисекундах. –

ответ

4
Time::Piece->strptime(substr($time, 0, -3), $format); 

так Time::Piece не поддерживает миллисекунды.

0

Если вы заботитесь о миллисекундах и хотите их сохранить, вам нужно будет изучить что-то еще (например, DateTime::Format::Strptime).

1

Вы можете использовать DateTime::Format::Strptime, если вы хотите, чтобы разобрать миллисекунды, то вы можете попробовать это:

my $Strp = new DateTime::Format::Strptime(
           pattern  => '%d%m%Y%H%M%S%3N', 
         ); 

my $date = $Strp->parse_datetime("11032014182819802"); 
print $date->millisecond ,"\n";