[英]How can I parse a strftime formatted string in Perl?
我是Perl的新手,我想知道strftime()是否有反函數。 看,
use POSIX qw(strftime);
print strftime("%YT%mT%d TTTT%H:%M:%S", localtime)
我得到: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";
$dt
是一個DateTime對象,所以你可以用它做任何你想做的事情。
我想我找到了解決方案: strptime($strptime_pattern, $string)
太容易了
use Time::ParseDate;
my $t = '2009T08T14 TTTT00:37:02';
$t =~ s/TTTT//;
$t =~ s/T/-/g;
$seconds_since_jan1_1970 = parsedate($t)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.