我是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"?
一种选择是使用正则表达式解析数字,然后使用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对象,所以你可以用它做任何你想做的事情.