将日期时间格式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."Z\n"; # Is this correct???
}
答案 0 :(得分:3)
use DateTime::Format::ISO8601;
my $dt = DateTime::Format::ISO8601->parse_datetime('yyyy-mm-ddThh:mm:ss');
使用DateTime::Format::ISO8601模块解析该格式并返回DateTime个对象。
答案 1 :(得分:2)
看一下这个问题,How can I validate dates in 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 /
答案 2 :(得分:2)
你需要一个DateTime :: Format :: *模块中的一个解析方法。
你的字符串看起来不像ISO8601格式('yyyy-mm-ddThh:mm:ss'),但它符合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