Как я могу сравнить даты в разных форматах в Perl? - PullRequest
0 голосов
/ 25 августа 2009

Может ли кто-нибудь помочь мне, как преобразовать этот формат даты "Пн, 24 августа 2009 17:00:44 +0800" в что-то вроде этого "2009-08-24 17:00:44" в Perl? Я просматривал в CPAN модули, но все же не смог найти то, что искал. Первый формат извлекается из учетной записи электронной почты с использованием Mail :: POP3Client. Другой из запроса в базе данных. Моя цель здесь состоит в том, чтобы сравнить эти две даты, но это не сработает, если они в другом формате. Любые предложения, пожалуйста? =) * * Тысяча одна

Ответы [ 3 ]

8 голосов
/ 25 августа 2009

Я бы использовал DateTime :: Format :: Strptime , чтобы преобразовать дату в объект DateTime, а затем попросил бы предоставить желаемое представление даты. e.g.:

my $parser = DateTime::Format::Strptime->new(pattern => '%a, %d %b %Y %T %z');
my $dt = $parser->parse_datetime($original_timestamp);

# Postgres-format timestamp for db storage
my $pg_timestamp = DateTime::Format::Pg->format_datetime($dt);

# Epoch timestamp for if I'm going to do the comparison in code
my $epoch = $dt->epoch;
1 голос
/ 25 августа 2009

Я бы использовал Дата :: Calc

Разделите строку, чтобы получить необходимые значения и используйте Decode _ Month ("Aug")

use strict;
use warnings;
use Date::Calc qw(:all);

my $datetime = 'Mon, 24 Aug 2009 17:00:44 +0800';

# get each part
my (undef, $day, $month_text, $year, $time, undef) = split('/,?\s/', $datetime);

my $month = Decode_Month($month_text);

# put together in wanted format
my $newdatetime = sprintf("%04d-%02d-%02d $time", $year, $month, $day);
0 голосов
/ 25 августа 2009

Если вы уверены, что формат метки времени вашего POP3-клиента не изменится, то я бы предложил преобразовать формат в сам запрос к базе данных. Вы не упомянули, какую базу данных вы используете, но все те, которые я использовал (Oracle, PostgreSQL, MySQL), имеют функции, которые дают вам любой формат, который вы хотите в своем операторе select.

Если вы сообщите нам, какую базу данных вы используете, я могу рассказать вам о функциях форматирования меток времени.

...