Potrzebuję polecenia powłoki lub skryptu, który konwertuje uniksowy znacznik czasu na datę. Dane wejściowe mogą pochodzić albo z pierwszego parametru, albo ze standardowego wejścia, umożliwiając następujące wzorce użytkowania:
ts2date 1267619929
i
echo 1267619929 | ts2date
Oba polecenia powinny wypisać „Śr 3 marca 38:38:49 2010”.
bash
date
unix-timestamp
Chiborg
źródło
źródło
date -d @$(date -u +%s)
@
? Nie widzę tego wcale na stronie podręcznika GNU.brew install coreutils; gdate -d @1267619929
info 'Date input formats'
date
przeniesie Cię bezpośrednio do węzła informacji o formatowaniu, z odpowiednim cytatem Roberta Grudina, a następnie menu specyfikatorów formatu.działa dla mnie w systemie Mac OS X.
źródło
Ta wersja jest podobna do odpowiedzi Chiborga , ale eliminuje potrzebę zewnętrznego
tty
icat
. Używadate
, ale równie łatwo może z niego korzystaćgawk
. Możesz zmienić shebang i zastąpić podwójne nawiasy kwadratowe pojedynczymi, a to również się pojawish
.źródło
gawk
jest (bardzo z grubsza) 15% szybszy niżdate
wfor
pętli czasowej składającej się tylko zgawk 'BEGIN { print strftime("%c", 1256571985); }'
lubdate -d '@1256571985' +%c
z przekierowaniem wyjścia/dev/null
.Możesz użyć daty GNU, na przykład
lub
źródło
Możesz użyć tego prostego skryptu awk:
Przykładowe użycie:
źródło
date -s @
nie działa iawk
nadal działa! Pomocny byłby też przykład bez standardowego wejścia.Od Bash 4.2 można użyć
printf
„s%(datefmt)T
format:To miłe, ponieważ jest to wbudowana powłoka. Format datefmt jest łańcuchem akceptowanym przez
strftime(3)
(patrzman 3 strftime
). Oto%c
:Teraz, jeśli chcesz skrypt, który akceptuje argument, a jeśli nie zostanie podany, czyta standardowe wejście, możesz postępować następująco:
źródło
Używam tego podczas konwertowania plików dziennika lub monitorowania:
źródło
awk '{ printf strftime("%c: ", $1); $1 = ""; print $0; }'
W OSX lub BSD istnieje równoważna
-r
flaga, która najwyraźniej przyjmuje znacznik czasu unix. Oto przykład, który uruchamia datę cztery razy: raz dla pierwszej daty, aby pokazać, co to jest; jeden do konwersji na znacznik czasu unix za pomocą%s
, i wreszcie ten, który za pomocą-r
konwertuje to, co%s
zapewnia z powrotem na ciąg.Wydaje się, że przynajmniej działa na moim komputerze.
źródło
Możesz uzyskać sformatowaną datę z datownika w ten sposób
źródło
Napisałem skrypt, który sam to robi:
źródło
W tej odpowiedzi kopiuję odpowiedź Dennisa Williamsona i nieznacznie ją modyfikuję, aby umożliwić znaczny wzrost prędkości podczas przesyłania do skryptu kolumny wielu znaczników czasu. Na przykład przesłanie 1000 znaczników czasu do oryginalnego skryptu za pomocą xargs -n1 na moim komputerze zajęło 6,929 s, w przeciwieństwie do 0,027 s w tej zmodyfikowanej wersji:
źródło
jakiś przykład:
źródło
Używam tego jednopłytkowego międzyplatformowego:
Powinien działać zarówno w systemie macOS, jak i późniejszych wersjach popularnych dystrybucji systemu Linux.
źródło
Chociaż nie jest to czysta bash, poniższy skrypt przekonwertuje znaczniki czasu o długości 13 w ciągu na ich równoważną datę w lokalnej strefie czasowej przy użyciu perla
timestamp_to_date.sh
Wejście
wynik
źródło
W PHP
źródło