Wyświetl znacznik czasu w dd / mm / rrrr_gg: mm: ss: ms w systemie Unix lub Linux


26

Muszę wyświetlać datę i godzinę w żądanym formacie w systemach Unix / Linux. Mój pożądany format to: dd / mm / rrrr gg: mm: ss: ms w systemie Unix lub Linux. Podszedłem blisko, używając następującego polecenia:

echo $(date +%x_%r)

Zwraca to:

08/20/2012_02:26:14 PM

Jakieś sugestie?


2
Czy jest jakiś powód, którego używasz echo? Wydaje się zbędny, można go użyć datebezpośrednio
lk-

Planuję zapisać aktualny czas w parametrze i użyć go jako części nazwy pliku wyjściowego.
Hank,

6
Dlaczego nie użyć ciągu daty w formacie ISO? Te / nie są dobre w nazwach plików ... ( en.wikipedia.org/wiki/ISO_8601 )
Johan


Najpopularniejsze formaty: zxq9.com/archives/795
zxq9

Odpowiedzi:


26
date +%x_%H:%M:%S:%N

jeśli chcesz wydrukować tylko dwie pierwsze liczby jako ms:

date +%x_%H:%M:%S:%N | sed 's/\(:[0-9][0-9]\)[0-9]*$/\1/'

przechowywać w var:

VAR=$(date +%x_%H:%M:%S:%N | sed 's/\(:[0-9][0-9]\)[0-9]*$/\1/')

1
Jest to specyficzne dla systemu Linux; nie działa na OS X lub * BSD.
cnst

Uwaga% x zwraca reprezentację daty ustawienia regionalne. Może więc się zmieniać w zależności od bieżących ustawień regionalnych. Jeśli chcesz tego konkretnego formatu daty, prawdopodobnie lepiej jest go wyraźnie podać (ponieważ inne odpowiedzi pokazują również poniżej) date +'%d/%m/%Y_%H:%M:%S:%N.
studgeek

23

Jeśli chcesz milisekund zamiast nanosekund dokładności, możesz użyć %3Nzamiast %N:

$ date +'%d/%m/%Y %H:%M:%S:%3N'
12/04/2014 18:36:20:659

lub z pożądanym użyciem $(…):

$ echo "$(date +'%d/%m/%Y %H:%M:%S:%3N')"
12/04/2014 18:36:20:659

Należy jednak pamiętać, że %Nmoże to nie zostać zaimplementowane w zależności od systemu docelowego lub wersji bash. Testowany na systemie wbudowanym »GNU bash, wersja 4.2.37 (2) -release (arm-buildroot-linux-gnueabi)« nie było %N(ani %3N):

date +"%F %T,%N"
2014-01-08 16:44:47,%N

2
Wygląda na to, że ani FreeBsd, ani Mac OSX nie obsługują %Nani %3N.
Joe

Dodałem echo "$(date +'%F %H:%M:%S:%3N') Failed" >> logfile.txt, ale zapisał file.file 08:21:02OURCE:184 Failedsię do pliku dziennika. Co zrobiłem źle?
Sven



0

Coś takiego

data + '% d /% m /% Y_% H:% M:% S:% N'

Użyłem% N dla nanosekund (000000000..999999999), ponieważ nie znalazłem teraz milisekund


0

Możesz spróbować:

echo `date +"%Y_%m_%d %H:%M:%S,"``date +%N/1000000|bc -l|grep -Eo "^([0-9]{0,3})"`

Z jakiegoś powodu słowo „” zostało pominięte, więc umieść je po echu i na końcu lub po prostu:

date +"[%Y_%m_%d %H:%M:%S,%3N]"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.