Visualizza timestamp in gg / mm / aaaa_hh: mm: ss: ms in Unix o Linux


26

Devo visualizzare la data e l'ora nel formato desiderato in Unix / Linux. Il mio formato desiderato è: gg / mm / aaaa hh: mm: ss: ms in Unix o Linux. Mi sono avvicinato usando il seguente comando:

echo $(date +%x_%r)

Questo ritorna:

08/20/2012_02:26:14 PM

Eventuali suggerimenti?


2
C'è qualche motivo che stai usando echo? Sembra ridondante, puoi semplicemente usare datedirettamente
lk-

Ho intenzione di memorizzare l'ora corrente in un parametro e utilizzarla come parte del nome di un file di output.
Hank

6
Perché non utilizzare una stringa di data in formato ISO? Quelli / non sono buoni nei nomi dei file ... ( en.wikipedia.org/wiki/ISO_8601 )
Johan


Formati più comuni: zxq9.com/archives/795
zxq9

Risposte:


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

se è necessario stampare solo due primi numeri come ms:

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

per memorizzarlo nel var:

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

1
Questo è specifico di Linux; non funziona su OS X o * BSD.
primo

Nota% x restituisce la rappresentazione della data della locale. Quindi può cambiare in base alle impostazioni internazionali correnti. Se desideri quel formato di data specifico, probabilmente stai meglio fornendo esplicitamente (come altre risposte mostrano anche di seguito) date +'%d/%m/%Y_%H:%M:%S:%N.
Studgeek

23

Se si desidera la precisione in millisecondi anziché in nanosecondi, è possibile utilizzare %3Ninvece di %N:

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

o con l'uso desiderato di $(…):

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

Ma attenzione, %Npotrebbe non essere implementato a seconda del sistema di destinazione o della versione bash. Testato su un sistema embedded »GNU bash, versione 4.2.37 (2) -release (arm-buildroot-linux-gnueabi)« non c'era %N(nessuno dei due %3N):

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

2
Sembra che né FreeBsd né Mac Osx supportino %No %3N.
Joe,

Ho aggiunto echo "$(date +'%F %H:%M:%S:%3N') Failed" >> logfile.txt, ma ha scritto file.file 08:21:02OURCE:184 Failednel file di registro. Cosa ho fatto di sbagliato?
Sven,



0

Qualcosa come questo

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

Ho usato% N per i nanosecondi (000000000..999999999) poiché non ho trovato millisecondi in questo momento


0

Puoi provare:

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

Per qualche motivo '' 'viene omesso, quindi inseriscilo dopo l'eco e alla fine, o semplicemente:

date +"[%Y_%m_%d %H:%M:%S,%3N]"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.