Mam plik dziennika ze znacznikami czasu w formacie „22.09.2016 08:22:54” („+% Y:% m:% d% H:% M:% S”). Ten znacznik czasu znajduje się w strefie czasowej UTC.
Teraz muszę przekonwertować ten znacznik czasu na znacznik czasu Europa / Helsinki za pomocą skryptu bash.
Mam ten skrypt, który czyni konwersję tak, jak chcę.
#!/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"
Działa to dobrze, ale format „data” „-d” 2015-05-20 18:05:02 ”jest innym formatem w porównaniu z formatem datownika dziennika.
Chciałbym zmienić ten skrypt na coś podobnego ..
#!/bin/bash
sec=$(TZ="UTC" date +'%s' -d "$1")
TZ="Europe/Helsinki" date -d "@$sec" "+%Y:%m:%d %H:%M:%S"
Gdzie $ 1 może być w oryginalnym formacie daty mojego pliku dziennika "22.09.2016 08:22:54" ("+% Y:% m:% d% H:% M:% S").
Nie mogę tego zrobić. Czy ktoś może mi pomóc z tym .. Dziękuję
EDYTOWAĆ:
Próbowałem czegoś takiego i wielu innych kombinacji ..
#!/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"
ale jego błąd kończy się
date: extra operand ‘+%Y:%m:%d %H:%M:%S’
Try 'date --help' for more information.
date: invalid date ‘@’
Odpowiedzi:
To nie wygląda
date
obsługuje ciąg formatów wejściowych. Jako taki nie będziesz w stanie po prostu iść dalej i przekazać do tej pory łańcucha. Strona man stwierdza, że akceptuje zwykłe formaty, więc może to mieć wpływ na ustawienia regionalne, ale nie jestem tego pewien.Co więcej, spójrzmy na swój skrypt:
Dzieje się tak dlatego, że konwertujesz
$1
parametr do znacznika czasu Linuksa, a następnie przekonwertuj go ponownie na żądany ciąg. Jednym z możliwych podejść do tej pracy z twoim wejściem byłoby ponowne sformatowanie$1
parametr string.Możesz to zrobić jako przykład, używając
sed
z odpowiednim wyrażeniem regularnym. Uważaj, abyś wcześniej upewnił się, że masz poprawny łańcuch i że wszelkie zmiany formatu mogą go przerwać.Edycja: Niewłaściwe nazwy zmiennych na pewno pomagają.
źródło
Wygląda to trochę ładniej, zamieniając czas NZ na czas Monaco:
TZ = „Europe / Monaco” date --date = „TZ =” Pacific / Auckland ”2017-10-11 00:51” +% Y-% m-% d% H:% M:% S
2017-10-10 13:51:00
źródło