如何在Perl中解析strftime格式的字符串?

Mar*_*kus 4 perl datetime

我是Perl的新手,我想知道strftime()是否有反函数.看,

use POSIX qw(strftime);
print strftime("%YT%mT%d TTTT%H:%M:%S", localtime) 
Run Code Online (Sandbox Code Playgroud)

我得到:2009T08T14 TTTT00:37:02.我该如何进行对位操作?从"2009T08T14 TTTT00:37:02"字符串获取2009-08-14 00:37:02,知道格式化字符串"%YT%mT%d TTTT%H:%M:%S"?

Sin*_*nür 7

一种选择是使用正则表达式解析数字,然后使用Time :: Local.但是,现在我理解你的问题是如何从strftime格式化的字符串转到一般的时间,这种方法必然是麻烦的.

你在答案POSIX::strptime中提到,如果你的平台支持它,那就太棒了.或者,您可以使用DateTime :: Format :: Strptime:

#!/usr/bin/perl

use strict;
use warnings;

use DateTime::Format::Strptime;
use POSIX qw(strftime);

my $f = "%YT%mT%d TTTT%H:%M:%S";
my $s = strftime($f, localtime);

print "$s\n";

my $Strp = DateTime::Format::Strptime->new(
    pattern   => $f,
    locale    => 'en_US',
    time_zone => 'US/Eastern',
);

my $dt = $Strp->parse_datetime($s);

print $dt->epoch, "\n";
print scalar localtime $dt->epoch, "\n";
Run Code Online (Sandbox Code Playgroud)

$dt是一个DateTime对象,所以你可以用它做任何你想做的事情.