什么是Perl正则表达式将"2012年12月26日12:00 AM"等日期转换为yyyymmdd?

Joh*_*0te 1 regex perl datetime type-conversion

我已经非常努力地使用Perl正则表达式找到这种特定转换(这些日期格式)的示例,但无济于事.有人可以帮我转换这些格式之间的日期吗?

Dec 26 2012 12:00AM ==>  201212126
Run Code Online (Sandbox Code Playgroud)

以下是我最初的尝试,但它运行得太慢(很明显,我使用了5次这样的子系统,这很荒谬).

# Format the input time to yyyymmdd from 'Dec 26 2012 12:00AM' like format.
sub formatTime($)
{
    #Get passed in value of format 'Dec 26 2012 12:00AM'.
    my $col = shift; 

    if (substr($col, 4, 1) eq " "){
        substr($col, 4, 1) = "0";
    }

    return substr($col, 7, 4).$months{substr($col, 0, 3)}.substr($col, 4, 2);
}
Run Code Online (Sandbox Code Playgroud)

注意:这是为了工作,用于将输入文件转换为非常大的数据库提取,不幸的是,平台上不支持python,这是我编写脚本的首选语言.我尝试制作自己的Perl正则表达式,但我没有时间阅读并在做其他部分时弄明白.昨天我已经浪费了大部分时间编写Perl脚本并在其余部分学习,这种转换只需要花费太长时间.

Pav*_*sov 19

我建议你使用模块DateTime + DateTime :: Format :: Strptime.

#!/usr/local/bin/perl
use strict;

use DateTime;
use DateTime::Format::Strptime;

my $strp = DateTime::Format::Strptime->new(
      pattern => '%b %d %Y %l:%M%p',
      locale  => 'en_US',
);

# convert date to 
my $date = 'Dec 26 2012 10:10AM';
my $dt   = $strp->parse_datetime( $date );
printf "%s -> %s\n", $date, $dt->strftime("%Y-%m-%d %H:%M");
Run Code Online (Sandbox Code Playgroud)

产量

Dec 26 2012 10:10AM -> 2012-12-26 10:10
Run Code Online (Sandbox Code Playgroud)