Как я могу преобразовать гггг-мм-дд чч: мм: сс в UTC в Perl? - PullRequest
3 голосов
/ 20 января 2010

преобразовать формат даты и времени гггг-мм-дд чч: мм: сс (может быть строкой) в UTC, Смотря на DateTime, но я не вижу, как разобрать строку?

UPDATE:

Это работает правильно?

require 5.002;

use strict;
use warnings;

use DateTime::Format::DateManip;

my $string = '2010-02-28 00:00:00';

my @dates = (
    $string
);

for my $date ( @dates ) {
    my $dt = DateTime::Format::DateManip->parse_datetime( $date );
    die "Cannot parse date $date, Please use a valid date in this format 'yyyy-mm-dd mm:hh:ss'"  unless defined $dt;
    print $dt."\n";
    $dt->set_time_zone( 'UTC' );
    print $dt."Z\n"; # Is this correct???
}

Ответы [ 3 ]

3 голосов
/ 20 января 2010
use DateTime::Format::ISO8601;
my $dt = DateTime::Format::ISO8601->parse_datetime('yyyy-mm-ddThh:mm:ss');

Используйте модуль DateTime :: Format :: ISO8601 , чтобы проанализировать этот формат и вернуть вам объект DateTime .

2 голосов
/ 20 января 2010

Вам нужен один из методов разбора в модуле DateTime :: Format :: *.

Ваша строка не совсем похожа на формат ISO8601 (это «гггг-мм-ддтч: мм: сс»), но соответствует MySQL стиль форматирования:

use DateTime::Format::MySQL;
my $dt = DateTime::Format::MySQL->parse_datetime('2010-02-28 00:00:00');

print $dt->strftime("%Y %M %d %T");

производит:

2010 00 28 00: 00: 00

2 голосов
/ 20 января 2010

Посмотрите на этот вопрос SO, Как проверить даты в Perl? для одного ответа.

В CPAN есть также несколько хороших вспомогательных модулей DateTime. Например, DateTimeX::Easy, который позволяет создавать DateTime объекты, подобные следующим:

use DateTimeX::Easy;

my $a_date    = DateTimeX::Easy->new( '11/17/2008 12:01am' );

my $tomorrow  = DateTimeX::Easy->new( 'tomorrow' );

my $last_week = DateTimeX::Easy->new( 'last week' );

/ I3az /

...