Wie wandle ich ein Datum / eine Uhrzeit in Epochzeit (Unixzeit / Sekunden seit 1970) in Perl um?
Gegeben Datum/Zeit in ein array von (Jahr, Monat, Tag, Stunde, minute, Sekunde), wie würden Sie es konvertieren zu Epoche Zeit, d.h., die Anzahl der Sekunden seit 1970-01-01 00:00:00 GMT?
Bonus-Frage: Wenn Sie die Datum/Zeit als string, wie würden Sie zuerst analysiert werden, in der (y,m,d,h,m,N) - array?
InformationsquelleAutor der Frage |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mit der DateTime - Modul, können Sie die Epoche() Methode auf ein DateTime-Objekt, denn das ist, was Sie denken, als unix-Zeit.
Verwendung von DateTimes ermöglicht Ihnen das konvertieren ziemlich leicht aus der Epoche, die auf Datum-Objekte.
Alternativ, localtime und gmtime konvertiert eine Epoche in ein array mit Tag, Monat und Jahr, und timelocal und timegm aus der Time::Local-Modul tun das Gegenteil, und wandelt ein array von Zeit-Elementen (Sekunden, Minuten, ..., Tage, Monate etc.) in einer Epoche.
InformationsquelleAutor der Antwort SpoonMeiser
Dies ist der einfachste Weg, um die unix Zeit:
Beachten Sie die umgekehrte Reihenfolge der Argumente und der Januar ist der Monat 0 ist.
Viele weitere Optionen finden Sie in der DateTime Modul von CPAN.
Als für die Analyse, finden Sie unter der Date::Parse Modul von CPAN. Wenn Sie wirklich brauchen, um Phantasie mit Datum Parsen, die Date::Manip kann hilfreich sein, obwohl seine eigene Dokumentation warnt Sie Weg von es, da es enthält eine Menge Gepäck (er weiß, Dinge wie gemeinsame business-Urlaub, zum Beispiel) und andere Lösungen, die viel schneller sind.
Wenn Sie geschehen, zu wissen, etwas über das format von Datum/Uhrzeit werden Sie dann analysieren Sie einen einfachen regulären Ausdruck genügen, aber du bist wahrscheinlich besser dran mit einem entsprechenden CPAN-Modul. Zum Beispiel, wenn Sie wissen, die Termine werden immer im YMDHMS bestellen, nutzen Sie das CPAN-Modul DateTime::Format::nach ISO8601.
Für meine eigene Referenz, wenn sonst nichts, unten ist eine Funktion, die ich für eine Anwendung, wo ich weiß, die Termine werden immer im YMDHMS, um alle oder einen Teil von "HMS" - Teil optional. Es werden alle Trennzeichen (zB "2009-02-15" oder "2009.02.15"). Es gibt die entsprechende unix-Zeit (Sekunden seit 1970-01-01 00:00:00 GMT) oder -1, wenn es konnte nicht analysiert werden (was bedeutet, dass Sie besser sicher sein, dass Sie nie rechtmäßig müssen analysieren, das Datum 1969-12-31 23:59:59). Es geht auch davon aus Ziffer zwei Jahre XX bis "69" beziehen sich auf "20XX", sonst "19XX" (z.B., "50-02-15" bedeutet 2050-02-15 aber "75-02-15" bedeutet 1975-02-15).
InformationsquelleAutor der Antwort
Um ein Datum zu analysieren, betrachten Date::Parse in CPAN.
InformationsquelleAutor der Antwort bmdhacks
InformationsquelleAutor der Antwort ysth
Ich weiß, das ist eine alte Frage, aber dachte, ich würde eine andere Antwort.
Time::Piece
ist der Kern von Perl-5.9.5Dieser ermöglicht das Parsen der Zeit in beliebige Formate über die
strptime
Methode.z.B.:
Teil der hilfreich ist - weil es eine überladene Objekt, können Sie es verwenden, für numerische Vergleiche.
z.B.
Oder, wenn Sie es in einem string-Kontext:
Erhalten Sie:
Gibt es eine Reihe von Zugriffsmethoden, die es ermöglichen, für einige verschiedene andere nützliche Zeit-basierte Transformationen. https://metacpan.org/pod/Time::Piece
InformationsquelleAutor der Antwort
Get-Date::Manip von CPANdann:
edit:
Date::Manip ist groß und langsam, aber sehr flexibel in der Analyse, und es ist reines perl. Verwenden Sie es, wenn Sie in Eile sind, wenn Sie code schreiben, und Sie wissen, dass Sie nicht in Eile sein, wenn Sie laufen.
z.B. Verwenden Sie es, zu analysieren, Optionen für die Befehlszeile einmal auf start-up, aber verwenden Sie es nicht analysieren große Mengen von Daten auf einem stark ausgelasteten web-server.
Sehen die Autoren-Kommentare.
(Dank an den Autor des ersten Kommentars)
InformationsquelleAutor der Antwort scottc
Mein Lieblings-datetime-parser ist DateTime::Format::nach ISO8601 Sobald Sie haben, dass Sie arbeiten, haben Sie ein DateTime-Objekt, leicht konvertierbar, Epoche-Sekunden-Epoche mit()
InformationsquelleAutor der Antwort skiphoppy
Gibt es viele manipulation von Datum-Module auf CPAN. Mein besonderer Favorit ist DateTime und Sie können die strptime-Module zu analysieren, Daten in beliebigen Formaten. Es gibt auch viele DateTime::Format-Module auf CPAN für die Handhabung von spezialisierten Datum-Formate, aber strptime ist die generic.
InformationsquelleAutor der Antwort Shlomi Fish
Weitere Referenz, ein one-liner, die angewendet werden können, zum Beispiel
!#/bin/sh
scripts.Nur daran erinnern, um zu vermeiden, oktal-Werte!
InformationsquelleAutor der Antwort
Möglicherweise eines der besseren Beispiele von "Es gibt Mehr Als Einen Weg, Es Zu Tun", mit oder ohne die Hilfe von CPAN.
Wenn Sie die Kontrolle haben über das, was Sie übergeben bekommen als 'Datum/Zeit', würde ich vorschlagen, gehen die DateTime route, entweder mit einem bestimmten Zeitpunkt::Zeitpunkt::Format-Unterklasse, oder mit DateTime::Format::Strptime, wenn es nicht die Unterstützung Ihrer abgedrehten Datums-format (siehe datetime-FAQ für mehr details). Im Allgemeinen, Datum::die Zeit ist der Weg zu gehen, wenn Sie wollen, um etwas ernstes zu tun, mit dem Ergebnis: einige Klassen auf CPAN sind ziemlich wie anal-retentive und zwanghaft genau.
Wenn Sie erwarten, dass seltsame Freiform-Zeug, wirf es auf Date::Parse's str2time () - Methode, erhalten Sie einen Sekunden-da-epoch-Wert können Sie dann Ihre böse Art mit, ohne den overhead von Date::Manip.
InformationsquelleAutor der Antwort Penfold
Einen filter bei der Umwandlung von Datumsangaben in verschiedenen ISO-Verwandte Formate (und wer würde etwas anderes nach dem Lesen die Schriften der Mächtigen Kuhn?) auf standard-Eingabe in Sekunden seit der Epoche der Zeit, die auf standard-output dienen können, um zu illustrieren beide Teile:
InformationsquelleAutor der Antwort Martin Dorey
Wenn Sie nur auf der Suche nach einem command-line utility (d.h., nicht etwas, das aufgerufen werden, von anderen Funktionen), versuchen, dieses Skript. Es nimmt die Existenz von GNU date (vorhanden auf so ziemlich jedem Linux-system):
Hier ist, wie es funktioniert:
InformationsquelleAutor der Antwort raldi