【发布时间】:2012-09-13 21:36:32
【问题描述】:
我已经非常努力地寻找使用 Perl 正则表达式进行这种特殊转换(这些日期格式)的示例,但无济于事。有人可以帮我在这些格式之间转换日期吗?
Dec 26 2012 12:00AM ==> 201212126
以下是我最初的尝试,但运行速度太慢(显然,我使用 substr 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);
}
注意:这是为了工作,用于将输入文件转换为非常大的数据库摄取,不幸的是,python 在我选择的脚本语言平台上不支持。我尝试制作自己的 Perl 正则表达式,但我只是没有时间在做其他部分时阅读并弄清楚它。昨天我已经浪费了大部分时间来编写 Perl 脚本并在剩余的时间里快速学习,这种转换花费了我太长时间。
【问题讨论】:
-
单独的正则表达式无法将
Dec转换为12。 Perl 中没有可用的日期解析函数吗? -
不要自己动手。日期转换是一个已解决的问题。 CPAN 上有许多模块可以为您执行此操作,例如答案中引用的 DateTime 模块。
标签: regex perl datetime type-conversion