• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[closed] Datum Umwandlung unter Freebsd

chappert

Hacker
Hallo zusammen,

ich habe ein Freebsd (8.1) System.
Auf diesem System habe ich folgenden Datumswert in einem File od. Variable: "Oct 4 13:11:49 2014 GMT"
Von diesem Wert möchte ich gerne die Sekunden angezeigt bekommen.
Leider unterstützt Freebsd nicht dieses Datumsformat. :/
Auf einem "normalen" Debian System habe ich die Möglichkeit mit folgendem Befehl mir die Sekunden von diesem Datum anzeigen zu lassen.
Code:
date '+%s' --date "Oct 4 13:11:49 2014 GMT"
Nur leider funktioniert das so nicht unter Freebsd.
Hat jemand eine Idee wie ich das hin bekommen? :???:

Vielen Dank schon mal für hilfreiche Kommentare.
 
A

Anonymous

Gast
chappert schrieb:
Code:
date '+%s' --date "Oct 4 13:11:49 2014 GMT"
Nur leider funktioniert das so nicht unter Freebsd.

Hilft nur Manpage schauen und ausprobieren, das bsd-Date Kommando ist im Verhalten und in den Optionen vollkommen verschieden zu dem date in Linux.
Notfalls musst du mit -f "FORMAT" das Eingabeformat vorgeben. Kann leider nicht ausprobieren, hätte auch nicht viel Sinn, da dort wahrscheinlich auch noch Umgebungsvariablen für die Zeitzone und Zeit Format eine Rolle spielen könnten, die können zwischen verschiedenen Usern und auf jedem Rechner unterschiedlich gesetzt sein.

robi
 

abgdf

Guru
Vielleicht ist Perl installiert und kann helfen. Das ginge so:
Code:
echo "Oct 4 13:11:49 2014 GMT" | perl -ne 'use Date::Parse; print str2time($_)."\n"'
Unter Umständen muß Date::parse erst installiert werden.
 

utopos

Member
@abgdf:
Dein Vorschlag liefert eine laufende Nummer der Sekunden (hier: 1412428309).

Für die Anzeige nur der Sekunden müsste man Deinen Befehl wie folgt erweitern:

Code:
expr `echo "Oct 4 13:11:49 2014 GMT" | perl -ne 'use Date::Parse; print str2time($_)."\n"'` % 60
 

abgdf

Guru
utopos schrieb:
@abgdf:
Dein Vorschlag liefert eine laufende Nummer der Sekunden (hier: 1412428309).
Oooh, Entschuldigung, ich dachte, der OP wollte die Sekunden seit Epoch (1.1.1970) angezeigt bekommen (das ist ja ein recht gängiges Format).
Nur die Sekunden aus dem Zeitstring extrahieren, kann man (auch) so:
Code:
echo "Oct 4 13:11:49 2014 GMT" | perl -ne 'use Date::Parse;@a=strptime($_);print $a[0]."\n"'
 

abgdf

Guru
ODER: Man extrahiert die Sekundenangabe direkt aus dem String (wenn der String immer dieses Format mit den Leerzeichen und den Doppelpunkten hat), dann braucht man kein Modul:
Code:
echo "Oct 4 13:11:49 2014 GMT" | perl -ne '@a=split(" ",$_);@b=split(":",$a[2]);print"$b[2]\n"'
;)
 

abgdf

Guru
Dasselbe mit awk:
Code:
echo "Oct 4 13:11:49 2014 GMT" | awk '{print $3}' | awk -F ":" '{print $3}'
Gruß an robi. ;)
 
A

Anonymous

Gast
utopos schrieb:
Für die Anzeige nur der Sekunden müsste man Deinen Befehl wie folgt erweitern:
Code:
expr `echo "Oct 4 13:11:49 2014 GMT" | perl -ne 'use Date::Parse; print str2time($_)."\n"'` % 60
na das ist dann doch etwas übertrieben, die Sekunden stehen schon im Zeitstring die bräuchte man aus dem String nur rausschneiden.
das geht mit bash, cut, awk oder sed genauso. da müsste man nicht den weiten Umweg über Zeitfunktionen machen. Beispiele :
Code:
echo "Oct 4 13:11:49 2014 GMT" | cut -c 13-14
Code:
echo "Oct 4 13:11:49 2014 GMT" | sed 's/^.*:\([[:digit:]]\{2\}\) .*$/\1/'
Code:
ZEIT="Oct 4 13:11:49 2014 GMT"
echo "${ZEIT:12:2}"

Aber ich befürchte hier wird wirklich die Zeit in Sekunden seit 1970 gesucht,
der Ausgangspunkt
date '+%s' --date "Oct 4 13:11:49 2014 GMT"
macht ja auch genau das.

robi
 
OP
C

chappert

Hacker
Lösung:

Als erstes habe ich die Local Zeit auf GMT umgestellt.
Code:
cp /usr/share/zoneinfo/GMT /etc/localtime

Nun konnte ich mit folgendem Code mir die Sekunden ausgeben
Code:
end_date="Oct  4 13:11:49 2014 GMT"
new=`echo $end_date | cut -d ' ' -f 1-4` # das GMT hinten abschneiden
end_date_seconds=`date -j -f "%b %d %T %Z %Y" "$new" "+%s"`

fertsch & Danke
 
Oben