如何在Perl中解析strftime格式的字符串?
我是Perl的新手,我想知道是否有与strftime()相反的功能。 看,如何在Perl中解析strftime格式的字符串?
use POSIX qw(strftime);
print strftime("%YT%mT%d TTTT%H:%M:%S", localtime)
我得到:2009T08T14 TTTT00:37:02。我该怎么做oposite操作?从“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";
$dt
是DateTime对象,所以你可以做几乎任何你想用它。
好吧,但如果我有一个函数,其参数是格式化字符串(这里例如“%YT%mT%d TTTT%H:%M:%S”),但我完全不知道它。所以,我正在寻找strftime函数 的反例。 – Markus 2009-08-13 22:12:11
不,只需使用DateTime :: Format :: Strptime。 – 2009-08-14 03:15:51
所以easyy
use Time::ParseDate;
my $t = '2009T08T14 TTTT00:37:02';
$t =~ s/TTTT//;
$t =~ s/T/-/g;
$seconds_since_jan1_1970 = parsedate($t)
我想我已经找到了解决办法:strptime($strptime_pattern, $string)
我不知道http://search.cpan.org/dist/POSIX-strptime/ ...但是,它看起来像我无法在Windows上安装它,因为'strptime'在Windows上不存在。有关更多信息,请参阅http://stackoverflow.com/questions/321849/strptime-equivalent-on-windows。 – 2009-08-13 22:31:34
当然,你可能不关心Windows。如果您担心可移植性,我只是提到它。 – 2009-08-13 22:35:33
等待,我也很快地回答。你的意思是,你想要的字符串**'2009-08-14 00:37:02' **或自纪元以来的秒数? – 2009-08-13 21:53:27
我想从字符串2009T08T14 TTTT00:37:02获取时间,以便将其与“有效”时间戳进行比较。 – Markus 2009-08-13 21:55:39