Преобразование даты - PullRequest
2 голосов
/ 04 мая 2011

В Perl, как мне конвертировать дату как

Thu Mar 06 02:59:39 +0000 2008

до

2008-03-06T02:59:39Z

Пробовал HTTP :: Date, работает, если у вопроса не было +0000 в строке: (

Ответы [ 3 ]

6 голосов
/ 04 мая 2011

DateTime :: Format :: Strptime выполнит это преобразование.

#!/usr/bin/perl
use strict;
use warnings;
use 5.012;
use DateTime::Format::Strptime;

my $date = 'Thu Mar 06 02:59:39 +0000 2008 ';

my( @strp ) = (
    DateTime::Format::Strptime->new( pattern => "%a %b %d %T %z %Y", ),
    DateTime::Format::Strptime->new( pattern => "%FY%T%Z", )
);

my $dt = $strp[0]->parse_datetime( $date );

print $strp[1]->format_datetime( $dt );

отпечатки 2008-03-06T02: 59: 39UTC

Chris

1 голос
/ 04 мая 2011

Если вы абсолютно уверены, что дата ВСЕГДА будет в этом формате, вы можете просто использовать регулярные выражения для ее переформатирования.Единственное, что у вас должен быть способ конвертировать месяц в число.Таким образом, вам не нужно загружать какие-либо дополнительные модули для преобразования даты:

my $date = "Thu Mar 06 02:59:39 +0000 2008";  #Original String

#Create the Month Hash (you might want all twelve months).
my %monthHash (Jan => "01", Feb => 2, Mar => 3);

# Use RegEx Matching to parse your date. 
# \S+ means one or more non-spaces
# \s+ means one or more spaces
# Parentheses save that part of the string in $1, $2, $3, etc.
$date =~ m/\S+\s+(\S+)\s+(\S+)\s+(\S+)\s+\S+\s(.*)/;

my $monthString = $1;
my $day = $2;
my $time = $3;
my $year = $4;

# Convert Month string to a number.
my $month = $monthHash{$monthString};

#Reformat the string
$fmtDate="$year-$month-$day" . "T" . "$time" . "Z";

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

1 голос
/ 04 мая 2011

Итак, отредактируйте его с помощью регулярного выражения и используйте HTTP::Date:

( my $new_date_string = $old_state_string ) =~ s/[+-]\d{4,}\s+//;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...