Perl, как преобразовать строку в Datetime? - PullRequest
13 голосов
/ 22 ноября 2011

Я пытался преобразовать строку в дату в perl, но получаю ошибку.

use strict; 
use warnings;  
use DateTime;  
use Date::Manip;

my $date = ParseDate("20111121");
print "today is ".$date->day_of_week."\n"; 

ошибка

Can't call method "day_of_week" without a package or object reference 

Похоже, что импорт пакета имеет проблемы ...

Спасибо

Ответы [ 3 ]

24 голосов
/ 22 ноября 2011

DateTime сам по себе не имеет средства синтаксического анализа, но есть много парсеров , которые генерируют объекты DateTime.В большинстве случаев вам, вероятно, понадобится DateTime :: Format :: Strptime .

use DateTime::Format::Strptime qw( );
my $format = DateTime::Format::Strptime->new(
   pattern   => '%Y%m%d',
   time_zone => 'local',
   on_error  => 'croak',
);
my $dt = $format->parse_datetime('20111121');

Или вы можете сделать это самостоятельно.

use DateTime qw( );
my ($y,$m,$d) = '20111121' =~ /^([0-9]{4})([0-9]{2})([0-9]{2})\z/
   or die;
my $dt = DateTime->new(
   year      => $y,
   month     => $m,
   day       => $d,
   time_zone => 'local',
);
22 голосов
/ 22 ноября 2011

DateTime не анализирует даты. Я бы выбрал основной модуль Time :: Piece , который дает вам strptime ():

#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
my $t = Time::Piece->strptime("20111121", "%Y%m%d");
print $t->strftime("%w\n");
0 голосов
/ 22 ноября 2011

Из документации модуля: Этот модуль не анализирует даты

Вам необходимо добавить код, такой как предложенный в Я напечатал дату с помощью strftime, как мне снова ее проанализировать? для преобразования строки в объект даты и времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...