Skip to content

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 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


Und der Rückweg:

$ perl -e 'print scalar localtime(1429783200)'
Thu Apr 23 12:00:00 2015


Wenn Ihr bessere Ideen habt, dann nur her damit.

Trackbacks

Keine Trackbacks

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Alexander am :

*Darf ich auch was sagen, wenn ich nicht eine bessere, sondern eine "more hacky" Idee habe? :-)

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 :

*Sehr coole Idee, danke!

Was ist mit dem Rückweg? Datum und Uhrzeit in einen Timestamp konvertieren.

Alexander am :

*Habe ich nicht nach gesucht - war mir denn doch zu hacky ;-)

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

Alexander am :

*Kein Ding.

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 :-)

Alexander am :

*Da verpasst Du nix - nur das, was hier schon steht.

Sebastian am :

*In Python als Einzeiler nicht ganz so hübsch (dafür ist die Sprache einfach nicht gemacht):

~# 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 :

*Danke!

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).

Jonny am :

*Wenn erlaubt ist ein Perl Modul zu installieren, dann kann ich dir
Time::ParseDate empfehlen. Benutze ich seit Jahren und it works :-)

Dirk Deimeke am :

*Nein, Nachinstallieren von Paketen ist nicht erlaubt. Sonst würde ich GNU date installieren ...

Jonny am :

*Time::ParseDate gehört zum Paket time-modules. Vielleicht gibt es das für Solaris oder ist sogar schon installiert.

Carsten Neumann am :

*Darf ich "ksh93" in die Runde werfen?

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 :

*Ja, es interessiert mich.

Allerdings muss es auch unter Solaris 10 funktionieren.

Carsten Neumann am :

*# Anzahl Sekunden seit Unix Epoch bis jetzt
$ 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 :

*Schau mal, ob die Anfrage, ob Du Die Kommentarbenachrichtigung haben möchtest bei Dir im Spam gelandet ist. Das funktioniert sehr zuverlässig.

Vielen Dank für die Codezeilen, das ist wirklich klasse!

Carsten Neumann am :

*Na ja, das hat (wie geschrieben) mit Solaris 10 nur indirekt zu tun. Wenn Du eine ksh93 installieren dürftest...

Dirk Deimeke am :

*Jat natürlich, das weiss ich.

Was ich damit sagen wollte, ist, dass die KSH, die im Standard bei Solaris 10 installiert ist, es nicht kann.

Carsten Neumann am :

*In der Tat von gmail nach SPAM sortiert:

"Eine größere Anzahl anderer Nutzer hat ähnliche Nachrichten als Spam markiert."

Kommentar schreiben

Gravatar, Favatar, Pavatar, Identica, Twitter, MyBlogLog Autoren-Bilder werden unterstützt.
BBCode-Formatierung erlaubt
Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
:'(  :-)  :-|  :-O  :-(  8-)  :-D  :-P  ;-) 
Formular-Optionen