2010-01-20 7 views
3

convertir le format datetime aaaa-mm-jj hh: mm: ss (Peut être une chaîne de caractères) en UTC, Vous recherchez dans DateTime mais je ne vois pas comment analyser la chaîne?Comment puis-je convertir aaaa-mm-jj hh: mm: ss en UTC en Perl?

MISE À JOUR:

Est-ce fonctionne correctement?

require 5.002; 

use strict; 
use warnings; 

use DateTime::Format::DateManip; 

my $string = '2010-02-28 00:00:00'; 

my @dates = (
    $string 
); 

for my $date (@dates) { 
    my $dt = DateTime::Format::DateManip->parse_datetime($date); 
    die "Cannot parse date $date, Please use a valid date in this format 'yyyy-mm-dd mm:hh:ss'" unless defined $dt; 
    print $dt."\n"; 
    $dt->set_time_zone('UTC'); 
    print $dt."Z\n"; # Is this correct??? 
} 

Répondre

2

Jetez un oeil à cette question SO, How can I validate dates in Perl? pour une réponse.

Il existe également quelques modules auxiliaires DateTime sur CPAN. Par exemple. DateTimeX::Easy qui vous permet de créer des objets DateTime comme ceci:

use DateTimeX::Easy; 

my $a_date = DateTimeX::Easy->new('11/17/2008 12:01am'); 

my $tomorrow = DateTimeX::Easy->new('tomorrow'); 

my $last_week = DateTimeX::Easy->new('last week'); 

/I3az/

+0

Merci pour la pointe, regardez mon –

+0

modifier cela me conduit à ma solution, voir UPDATE. Merci encore –

+0

Aucun problème. Cependant, je ne suis pas sûr de ce que votre "Est-ce correct?" modifier se réfère à? Si aucun fuseau horaire n'est fourni dans la chaîne de date/heure analysée, votre TZ locale est supposée pour cela. Le $ dt-> set_time_zone() vous permet alors de voir l'objet DateTime que vous avez mais dans une perspective de fuseau horaire différente. J'espère que cela a du sens! – draegtun

3
use DateTime::Format::ISO8601; 
my $dt = DateTime::Format::ISO8601->parse_datetime('yyyy-mm-ddThh:mm:ss'); 

Utilisez le module DateTime::Format::ISO8601 pour analyser ce format et vous redonner un objet DateTime.

2

Vous avez besoin d'une des méthodes d'analyse dans un module DateTime :: Format :: *.

Votre chaîne ne semble pas tout à fait comme le format ISO8601 (qui est 'aaaa-mm-jjThh: mm: ss'), mais il correspond MySQL « le style de mise en forme s:

use DateTime::Format::MySQL; 
my $dt = DateTime::Format::MySQL->parse_datetime('2010-02-28 00:00:00'); 

print $dt->strftime("%Y %M %d %T"); 

produit:

2010 00 28 00:00:00

+0

Réponse très imprécise. – daxim

+0

@daxim: la question à laquelle j'ai répondu était très vague (si vous regardez dans l'historique des modifications, ce n'était qu'une ligne). – Ether

+0

@daxim: veuillez vérifier à nouveau, le code de travail et la référence ont été ajoutés. Aujourd'hui a été une mauvaise journée pour moi pour downvotes et je voudrais résoudre ce problème! :) – Ether