Как я могу разобрать строку в формате strftime в 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"?
3 ответа
Один из вариантов - проанализировать числа с помощью регулярного выражения, а затем использовать Time:: Local. Тем не менее, теперь, когда я понимаю, ваш вопрос, как перейти от strftime
форматированная строка для времени в целом, такой подход должен быть громоздким.
Вы упоминаете в своем ответе POSIX::strptime
это здорово, если ваша платформа поддерживает это. В качестве альтернативы вы можете использовать http://search.cpan.org/perldoc/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)