簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM