代码之家  ›  专栏  ›  技术社区  ›  Phill Pafford

如何用Perl将yyyy-mm-dd hh:mm:ss转换为UTC?

  •  3
  • Phill Pafford  · 技术社区  · 14 年前

    将日期时间格式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???
    }
    
    3 回复  |  直到 14 年前
        1
  •  2
  •   Community Egal    7 年前

    看看这个问题, 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
  •  3
  •   jamessan    14 年前
    use DateTime::Format::ISO8601;
    my $dt = DateTime::Format::ISO8601->parse_datetime('yyyy-mm-ddThh:mm:ss');
    

    使用 DateTime::Format::ISO8601 模块来解析该格式并返回 DateTime 对象。

        3
  •  2
  •   Ether    14 年前

    您需要一个datetime::格式::*模块中的分析方法。

    您的字符串看起来不像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