/ / Fehler beim Verwenden von Date :: Format - Perl

Fehler beim Verwenden von Date :: Format - Perl

Ich möchte konvertieren 2003-07-04T15:56:00 zu 04/07-2003 So ich mache

#!/usr/bin/perl -w
use strict;
use Date::Format;
use Data::Dumper;

my $time_format = "%d/%m-%Y";
my $time = "2003-07-04T15:56:00";

print Dumper time2str($time_format, $time);

und bekomme

Argument "2003-07-04T15:56:00" isn"t numeric in localtime at /usr/lib/perl5/vendor_perl/5.8.8/Date/Format.pm line 123.
$VAR1 = "01/01-1970";

Irgendeine Idee, wie man diese Datumsumwandlung macht?

Antworten:

2 für die Antwort № 1
DateTime::Format::Strptime
->new(pattern => "%FT%T")
->parse_datetime("2003-07-04T15:56:00")
->strftime("%d/%m-%Y")

# returns 04/07-2003

3 für die Antwort № 2

Die Fehlermeldung ist genau richtig: time2str erwartet eine numerische Datumsdarstellung, hat aber die Zeichenfolge erhalten "2003-07-04T15:56:00".

Es gibt wahrscheinlich mehrere Möglichkeiten, dies zu lösen. Einer von ihnen ist Zeit :: Lokal, die Ihnen helfen können, ein richtiges numerisches Datum zu erstellen.

Versuchen Sie zu ersetzen

my $time = "2003-07-04T15:56:00";

mit:

my $time = timelocal(0,56,15,4,7-1,2003);

Wie @Jorik sagte, ist die monatliche Spezifikation etwas ungewöhnlich:

Es lohnt sich, besonders zu zeichnen Aufmerksamkeit auf die erwarteten Bereiche für die angegebenen Werte. Der Wert für die Tag des Monats ist der tatsächliche Tag (d. h 1..31), während der Monat ist die Anzahl der Monate seit Januar (0..11). Dies stimmt mit den zurückgegebenen Werten überein von localtime () und gmtime ().

Bearbeiten Für generische Lösungen zu Daten in Strings lesen Sie die Antworten auf diese Frage: Wie kann ich Daten in Perl analysieren und Zeitzonen umwandeln?.