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 № 1DateTime::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?.