2016-04-16 7 views
0

Mein Bash-Skript sucht nach einer Datum-Uhrzeit-Zeichenfolge, die wie folgt aussieht: yyyymmddThhmmss, zum Beispiel 20160414T033407.Wie wandle ich yyyymmddThhmmss in einen veränderbaren Datumszeit-Typ im Shell-Skript um?

Ich möchte diese Zeichenfolge in Datum/Uhrzeit Format konvertieren, so dass ich zum Beispiel die Zeitzone ändern kann. Momentan analysiere ich diese Zeichenkette hart und führe zu jeder Stunde einen -n aus, um den Zeitstempel in meine aktuelle Zeitzone zu konvertieren. Allerdings sehe ich, dass ich Rollstunden für die nächsten Tage usw. berücksichtigt habe. Was ist ein besserer Ansatz dafür? Vielen Dank.

Antwort

0

Könnte es mit sed ausbrechen und es in einem Format wiederholen, das andere Werkzeuge verstehen werden.

$ echo '20160414T033407' | sed -r 's/([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})([0-9]{2})/\1-\2-\3 \4:\5:\6/' 
2016-04-14 03:34:07 

und ihn dann auf dem neuesten Stand in einem Format, das Sie aussteigen möchten, zum Beispiel Unix-Zeitstempel:

$ date --date="$(echo '20160414T033407' | sed -r 's/([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2})([0-9]{2})([0-9]{2})/\1-\2-\3 \4:\5:\6/')" +%s 
1460630047 
1

Datum nicht „YYYYMMDDHHMMSS“ erlaubt, aber es funktioniert „JJJJMMTT HH : MM: SS“, so:

D="20100101123456" 
date -d "${D:0:8} ${D:8:2}:${D:10:2}:${D:12:2}" 
+0

Nizza Verwendung von [Substring Expansion] (https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html) jedoch in das OP gibt es ein "T" in der Zeichenfolge, yyyymmddThhmmss zB 20160414T033407 und Ihre Antwort adressiert das nicht! – user3439894

+0

Es hängt auch davon ab, welche Version von 'Datum' Sie verwenden. Mit BSD 'date' können Sie ein Eingabeformat angeben, das dieselben Felder wie die Ausgabe verwendet. – chepner

+0

'D =" 20160414T033407 "; Datum -d "$ {D: 0: 8} $ {D: 9: 2}: $ {D: 11: 2}: $ {D: 13: 2}" – Cyrus

Verwandte Themen