Konvertieren Sie das Datum in eine andere Zeitzone + Formatänderung

3073
user3647376

Ich habe eine Protokolldatei mit Zeitstempeln im Format "22.09.2016 08:22:54" ("+% Y:% m:% d% H:% M:% S"). Dieser Zeitstempel ist in UTC-Zeitzone.

Jetzt muss ich diesen Zeitstempel mithilfe des Bash-Skripts in einen Europa- / Helsinki-Zeitstempel konvertieren.

Ich habe dieses Skript, das die Konvertierung so macht, wie ich will.

#!/bin/bash sec=$(TZ="UTC" date +'%s' -d "2015-05-20 18:05:02") TZ="Europe/Helsinki" date -d "@$sec" "+%Y:%m:%d %H:%M:%S" 

Dies funktioniert gut, aber das Datum "input" -Format (-d "2015-05-20 18:05:02") unterscheidet sich vom Format meines Protokollzeitstempels.

Ich möchte dieses Skript in so etwas ändern.

#!/bin/bash sec=$(TZ="UTC" date +'%s' -d "$1") TZ="Europe/Helsinki" date -d "@$sec" "+%Y:%m:%d %H:%M:%S" 

Wo kann $ 1 im ursprünglichen Datumsformat meiner Protokolldatei "22.09.2016 08:22:54" sein ("+% Y:% m:% d% H:% M:% S").

Ich kann das nicht zum Laufen bringen .. Kann mir jemand mit diesem helfen .. Danke

BEARBEITEN:

Ich habe so etwas und viele andere Kombinationen ausprobiert ..

#!/bin/sh  sec=$(TZ="UTC" date +'%s' "+%Y:%m:%d %H:%M:%S" -d "$1")  TZ="Europe/Helsinki" date -d "@$sec" "+%Y:%m:%d %H:%M:%S"  

aber er endet mit einem Fehler ..

date: extra operand ‘+%Y:%m:%d %H:%M:%S’  Try 'date --help' for more information.  date: invalid date ‘@’  
0
Haben Sie versucht, ein Format für Ihre erste Zeile festzulegen? Seth vor 7 Jahren 0
ja .. ich habe es ausprobiert .. #! / bin / sh sec = $ (TZ = "UTC" Datum + '% s' "+% Y:% m:% d% H:% M:% S" - d "$ 1") TZ = "Europe / Helsinki" Datum -d "@ $ sec" "+% Y:% m:% d% H:% M:% S", aber er endet mit dem Fehler .. Datum: extra Operand '+% Y:% m:% d% H:% M:% S Versuchen Sie' date --help ', um weitere Informationen zu erhalten. Datum: ungültiges Datum '@' user3647376 vor 7 Jahren 0

2 Antworten auf die Frage

0
Seth

Es sieht nicht so aus, als würde dateeine Eingabeformat-Zeichenfolge unterstützt. Daher können Sie die Saite nicht einfach weitergeben. Die Manpage gibt an, dass sie die üblichen Formate akzeptiert, daher könnte dies durch Ihre Ländereinstellung beeinflusst werden, aber ich bin mir nicht sicher.

Weiter können wir uns Ihr Skript ansehen:

#!/bin/bash sec=$(TZ="UTC" date +'%s' -d "$1") $(TZ="Europe/Helsinki" date -d "@$sec" "+%Y:%m:%d %H:%M:%S") 

Was hier passiert, ist, dass Sie den $1Parameter in einen Linux-Zeitstempel konvertieren und ihn dann erneut in einen von Ihnen gewünschten String konvertieren. Ein möglicher Ansatz, um dies mit Ihrer Eingabe zum Laufen zu bringen, wäre die Neuformatierung des $1String-Parameters.

Sie können dies als Beispiel tun, indem Sie sedeinen geeigneten Regex verwenden. Beachten Sie, dass Sie vorher sicherstellen sollten, dass Sie eine gültige Zeichenfolge haben und dass bei Formatänderungen dies möglicherweise beschädigt wird.

#!/bin/bash intputdate=$(echo $1 | sed -re 's/([0-9])\.([0-9])\.([0-9])/\3-\2-\1/') sec=$(TZ="UTC" date +'%s' -d "$intputdate") echo $(TZ="Europe/Helsinki" date -d "@$sec" "+%Y:%m:%d %H:%M:%S") 

Edit: Nicht die falschen Variablennamen zu haben, hilft sicherlich.

0
P6039

Das sieht ein bisschen schöner aus und konvertiert die NZ-Zeit in Monaco-Zeit:

TZ = "Europa / Monaco" Datum - Datum = "TZ = \" Pacific / Auckland "" 2017-10-11 00:51 "+% Y-% m-% d \% H:% M:% S

2017-10-10 13:51:00

#!/bin/bash new_zealand_time="2017-10-12 00:56" monaco_time=$(TZ="Europe/Monaco" date --date="TZ=\"Pacific/Auckland\" $new_zealand_time" +%Y-%m-%d\ %H:%M:%S) echo "Time in Monaco: $monaco_time" 

Zeit in Monaco: 11.10.2017 um 13:56:00 Uhr

Lesen Sie weiter ["Warum brauche ich 50 Reputation, um einen Kommentar abzugeben"] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can-i -do-stattdessen), um sicherzustellen, dass Sie verstehen, wie Sie mit dem Kommentieren beginnen können. Pimp Juice IT vor 6 Jahren 0