Как я могу преобразовать гггг-ММ-ДД чч: мм: СС в UTC в Perl?
Преобразование формата datetime yyyy-mm-dd hh: mm:ss (может быть строкой) в UTC, Глядя в DateTime, но я не вижу, как разобрать строку?
Обновление:
Работает ли это правильно?
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."Zn"; # Is this correct???
}
3 ответа:
Взгляните на этот вопрос так, Как я могу проверить даты в Perl? за один ответ.
Есть также некоторые хорошие
DateTime
вспомогательные модули на CPAN . Например.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 /
use DateTime::Format::ISO8601; my $dt = DateTime::Format::ISO8601->parse_datetime('yyyy-mm-ddThh:mm:ss');
Используйте модульDateTime::Format::ISO8601 , чтобы проанализировать этот формат и вернуть объектDateTime .
Вам нужен один из методов синтаксического анализа в модуле DateTime::Format::*.
Ваша строка не совсем похожа на формат ISO8601 (который является 'yyyy-mm-ddThh: mm:ss'), но она соответствует MySQL 's стиль форматирования:
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