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?


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/')

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

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



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


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]"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.