Umrechnung Timestamp mit Perl ...
Weil ich es neulich gebraucht habe.
Aufgabe ist es, Zeiten eines normalen Datums in einen Unixtimestamp und wieder zurück umzurechnen. Nebenbedingung, es dürfen nur Bordmittel verwendet werden und laufen sollte es bitte unter Linux und Solaris. (Unter Solaris ist im Standard kein GNU
Meine Lösung war, Perl zu benutzen.
Einzig das Datumsformat ist unschön, vom Monat muss eins abgezogen werden und vom Jahr 1900.
Und der Rückweg:
Wenn Ihr bessere Ideen habt, dann nur her damit.
Aufgabe ist es, Zeiten eines normalen Datums in einen Unixtimestamp und wieder zurück umzurechnen. Nebenbedingung, es dürfen nur Bordmittel verwendet werden und laufen sollte es bitte unter Linux und Solaris. (Unter Solaris ist im Standard kein GNU
date
aus den GNU coreutils installiert, sonst wäre es einfach).Meine Lösung war, Perl zu benutzen.
Einzig das Datumsformat ist unschön, vom Monat muss eins abgezogen werden und vom Jahr 1900.
$ perl -mTime::Local -e 'print Time::Local::timelocal(0,0,12,23,04-1,2015-1900)'
1429783200
1429783200
Und der Rückweg:
$ perl -e 'print scalar localtime(1429783200)'
Thu Apr 23 12:00:00 2015
Thu Apr 23 12:00:00 2015
Wenn Ihr bessere Ideen habt, dann nur her damit.
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt
Alexander am :
Bei Solaris kann man auch adb verwenden:
currentEpoch=1429783200
echo "0t${currentEpoch}=Y" | /usr/bin/adb
2015 Apr 23 12:00:00
Dirk Deimeke am :
Was ist mit dem Rückweg? Datum und Uhrzeit in einen Timestamp konvertieren.
Alexander am :
Ich hatte auch mal truss und date verwendet, um die akt. Epoche Sekunden zu bestimmen ->
/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);printf "0t%d=Y\n", $2-86400}' | adb
Oder so.
(Zugegeben, das habe ich jetzt gerade copy-pasted von http://solarisjedi.blogspot.ch/2006/06/solaris-date-command-and-epoch-time.html)
Aber in echt nutze ich dann doch perl. Das klappt wenigstens überall, wo Perl installiert ist G
Dirk Deimeke am :
Danke, dass Du Dir die Mühe gemacht hast.
Alexander am :
Ha, ich wusste doch, das ich das echt schon mal gesucht und (wie ich fürchte *G*) genutzt habe:
https://plus.google.com/+AlexanderSkwar/posts/2NRWnAcpAdv
August 2012
Dirk Deimeke am :
Alexander am :
Dirk Deimeke am :
Sebastian am :
~# python -c "import datetime;print datetime.datetime.fromtimestamp(1429783200)"
2015-04-23 12:00:00
# python -c "import datetime;print datetime.datetime(2015, 4, 23, 12, 0, 0).strftime('%s')"
1429783200
Jeweils Python 2.7.x
Dirk Deimeke am :
Das Problem ist leider, dass nicht per Default auf jedem Solaris Python installiert ist.
(Interessanterweise ist in der Minimalinstallation des aktuellen RHEL 7 und auch CentOS 7 kein Perl mehr installiert, dafür aber Python).
Sebastian am :
Dirk Deimeke am :
Jonny am :
Time::ParseDate empfehlen. Benutze ich seit Jahren und it works
Dirk Deimeke am :
Jonny am :
Dirk Deimeke am :
Carsten Neumann am :
Das ist bei Solaris 11 dabei, auf "meinen" Linuxen auch und der print-Befehl kann ganz viel mit Datümern.
Wenn es interessiert, kann ich morgen nachschauen, heute ist es zu spät
Dirk Deimeke am :
Allerdings muss es auch unter Solaris 10 funktionieren.
Carsten Neumann am :
$ printf "%(%s)T\n" now
1430996522
# Anzahl Sekunden seit Unix Epoch bis zu einem Datum
$ printf "%(%s)T\n" "07/05/15 12:52:20"
1436093540
Sekunden nach Datum konvertiert
$ printf "%T\n" #1436093540
Thu May 7 13:03:57 CEST 2015
Eine schöne Beschreibung gibt es hier
http://blog.fpmurphy.com/2008/10/ksh93-date-manipulation.html
Das geht so aber nur mit dem ksh93 printf builtin und unter Solaris 10 hast Du normalerweise nur eine ksh88.
PS. Da war keine Benachrichtigung über Deinen Kommentar in meiner Mail, daher etwas verspätet.
Dirk Deimeke am :
Vielen Dank für die Codezeilen, das ist wirklich klasse!
Dirk Deimeke am :
Schade, eigentlich.
Carsten Neumann am :
Dirk Deimeke am :
Was ich damit sagen wollte, ist, dass die KSH, die im Standard bei Solaris 10 installiert ist, es nicht kann.
Carsten Neumann am :
"Eine größere Anzahl anderer Nutzer hat ähnliche Nachrichten als Spam markiert."
Dirk Deimeke am :