Какой лучший способ справиться с математикой времени в Perl? - PullRequest
6 голосов
/ 05 марта 2009

Я запускаю два больших файла журнала и хочу сравнить метки времени.

Я уже написал сценарий Perl, чтобы найти соответствующие операторы журнала, но мне нужно найти разницу во временных метках.

Например, 15: 31: 19.430888 минус 15: 31: 19.427763

Есть ли хорошие конструкции для работы со временем в Perl? Я не хочу заниматься математикой времени сам, если смогу избежать этого.

Ответы [ 2 ]

13 голосов
/ 05 марта 2009

Вы можете использовать модуль DateTime CPAN.

например.

my $dt = DateTime->new( 
                      year   => 2009,
                      hour   => 15,
                      minute => 31,
                      second => 19,
                      nanosecond => 430888
);
my $dt2 = DateTime->new( 
                      year   => 2009,
                      hour   => 15,
                      minute => 31,
                      second => 19,
                      nanosecond => 427763
);
my $duration = $dt - $dt2;

, который даст вам объект DateTime :: Duration для получения результатов из.

5 голосов
/ 05 марта 2009

DateTime является лучшим, но только если вы не забываете использовать метод subtract_datetime_absolute вместо перегруженного оператора минус, когда вы выполняете любую математическую обработку даты, связанную с вычитанием. Это единственный способ получить «длительность секундомера» из двух датчасов, и только длительность секундомера когда-либо была полезна для той арифметики дат, которую я делаю. Интерфейс DateTime :: Duration вводит в заблуждение и вводит в заблуждение, особенно если вы считаете, что у вас есть продолжительность секундомера, а у вас ее нет.

Раньше люди упоминали о том, насколько запутанным будет , но это никогда не исправлялось.

Модуль Time :: Piece представляет собой хорошую альтернативу. Я должен сказать, что в целом он не так полезен, как DateTime, но он определенно избегает такого рода путаницы. Я предпочитаю DateTime, но едва.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...