Mostrar marca de tiempo en dd / mm / aaaa_hh: mm: ss: ms en Unix o Linux

26

Necesito mostrar la fecha y la hora en el formato deseado en Unix / Linux. Mi formato deseado es: dd / mm / aaaa hh: mm: ss: ms en Unix o Linux. Me acerqué usando el siguiente comando:

echo $(date +%x_%r)

Esto devuelve:

08/20/2012_02:26:14 PM

¿Alguna sugerencia?

Madeja
fuente
2
¿Hay alguna razón que estás usando echo? Parece redundante, puede usarlo datedirectamente
lk-
Planeo almacenar la hora actual en un parámetro y usarlo como parte del nombre de un archivo de salida.
Hank
66
¿Por qué no usar una cadena de fecha con formato ISO? Esos / no son buenos en los nombres de archivo ... ( en.wikipedia.org/wiki/ISO_8601 )
Johan
Formatos más comunes: zxq9.com/archives/795
zxq9

Respuestas:

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

si necesita imprimir solo dos primeros números como ms:

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

para almacenarlo en la var:

VAR=$(date +%x_%H:%M:%S:%N | sed 's/\(:[0-9][0-9]\)[0-9]*$/\1/')
prisa
fuente
1
Esto es específico de Linux; no funciona en OS X o * BSD.
cnst
Nota% x devuelve la representación de fecha de la configuración regional. Por lo tanto, puede cambiar según la configuración regional actual. Si desea ese formato de fecha específico, probablemente sea mejor que lo proporcione explícitamente (como otras respuestas también se muestran a continuación) date +'%d/%m/%Y_%H:%M:%S:%N.
studgeek
23

Si desea una precisión de milisegundos en lugar de nanosegundos, puede usar en %3Nlugar de %N:

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

o con su uso deseado de $(…):

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

Pero tenga en cuenta que eso %Npuede no implementarse dependiendo de su sistema de destino o versión de bash. Probado en un sistema integrado »GNU bash, versión 4.2.37 (2) -release (arm-buildroot-linux-gnueabi)« no había %N(ninguno %3N):

date +"%F %T,%N"
2014-01-08 16:44:47,%N
Joe
fuente
2
Parece que ni FreeBsd ni Mac Osx admiten %No %3N.
Joe
Agregué echo "$(date +'%F %H:%M:%S:%3N') Failed" >> logfile.txt, pero escribió file.file 08:21:02OURCE:184 Faileden el archivo de registro. ¿Qué hice mal?
Sven
En macOS hay gdateen Homebrew apple.stackexchange.com/a/135749/181223
phil pirozhkov
0

Algo como esto

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

Usé% N para nanosegundos (000000000..999999999) ya que no encontré milisegundos en este momento

Johan
fuente
0

Puedes probar:

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

Por alguna razón, se omite '' ', así que póngalo después del eco y al final, o simplemente:

date +"[%Y_%m_%d %H:%M:%S,%3N]"
usuario2538887
fuente