Perl日期函数/模块能够理解完整的未缩写月份

时间:2011-02-06 06:17:17

标签: perl date module

假设我从某个包含日期的地方读取字符串,并且它的日期格式不会缩写月份。是否有一个模块可以处理读取,然后将其输出到我选择的任何格式?我已经快速浏览了CPAN,我看到的每个日期模块似乎都没有适应未缩短的月份。

感谢您的帮助

编辑: 举个例子,假设我们有一个像这样的字符串; “1988年2月2日”。现在我们要将其转换为“1988-02-02”(YYYY-MM-DD)。

4 个答案:

答案 0 :(得分:6)

您可以使用核心Time::Piece模块及其strptime方法。格式在strftime man page上描述,对于完整月份名称,有%B格式说明符:

use Time::Piece;
my $dt = Time::Piece->strptime("2 February 1988", "%d %B %Y");
print $dt->ymd,"\n";

答案 1 :(得分:4)

使用DateTimeX::Easy

程序

my $dt = DateTimeX::Easy->new('2 February 1988');
print $dt->date();

输出

1988-02-02

答案 2 :(得分:1)

我总是使用Date :: Parse,因为它可以自动检测输入格式并使用“str2time”将其转换为unix时间。如果我想格式化日期,我使用“strftime”。

use Date::Parse;
use POSIX 'strftime';

$unix_time = str2time "2 February 1988";
print strftime "%Y-%m-%d", localtime $unix_time;

答案 3 :(得分:-1)

您应该编写自己的转换模块。

您可以使用哈希进行如下快速转换:

我的%month =(“Jan”=>“01”,             “Feb”=> “02”,             “Mar”=> “03”,             “Apr”=> “04”,             “May”=> “05”,             “Jun”=> “06”,             “Jul”=> “07”,             “Aug”=> “08”,             “Sep”=> “09”,             “Oct”=> “10”,             “Nov”=> “11”,             “Dec”=> “12”);

我的%day =(“太阳”=>“01”,             “Mon”=> “02”,             “星期二”=> “03”,             “温”=> “04”,             “星期四”=> “05”,             “星期五”=> “06”,             “周六”=> “07”);