Exibir registro de data e hora em dd / mm / aaaa_hh: mm: ss: ms no Unix ou Linux

26

Eu preciso exibir a data e a hora no formato desejado no Unix / Linux. Meu formato desejado é: dd / mm / aaaa hh: mm: ss: ms no Unix ou Linux. Cheguei perto usando o seguinte comando:

echo $(date +%x_%r)

Isso retorna:

08/20/2012_02:26:14 PM

Alguma sugestão?

Hank
fonte
2
Existe algum motivo para você estar usando echo? Parece redundante, você pode simplesmente usar datediretamente
lk-
Pretendo armazenar o horário atual em um parâmetro e usá-lo como parte de um nome de arquivo de saída.
Hank
6
Por que não usar uma string de data formatada ISO? Aqueles / não é bom em nomes de arquivos ... ( en.wikipedia.org/wiki/ISO_8601 )
Johan
Formatos mais comuns: zxq9.com/archives/795
zxq9 13/04/2018

Respostas:

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

se você precisar imprimir apenas dois primeiros números como ms:

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

para armazená-lo no var:

VAR=$(date +%x_%H:%M:%S:%N | sed 's/\(:[0-9][0-9]\)[0-9]*$/\1/')
pressa
fonte
11
Isso é específico do Linux; não funciona no OS X ou * BSD.
cnst 13/08
Nota% x retorna a representação da data da localidade. Portanto, ele pode mudar com base na localidade atual. Se você deseja esse formato de data específico, provavelmente é melhor fornecê-lo explicitamente (como outras respostas também mostram abaixo) date +'%d/%m/%Y_%H:%M:%S:%N.
studgeek 20/09
23

Se você quiser precisão de milissegundos em vez de nanossegundos, poderá usar em %3Nvez de %N:

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

ou com o uso desejado de $(…):

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

Mas esteja ciente de que isso %Npode não ser implementado dependendo do sistema de destino ou da versão do bash. Testado em um sistema incorporado »GNU bash, versão 4.2.37 (2) -release (arm-buildroot-linux-gnueabi)« não houve %N(nenhum %3N):

date +"%F %T,%N"
2014-01-08 16:44:47,%N
Joe
fonte
2
Parece que nem o FreeBsd nem o Mac Osx suportam %Nou %3N.
Joe
Eu adicionei echo "$(date +'%F %H:%M:%S:%3N') Failed" >> logfile.txt, mas ele escreveu file.file 08:21:02OURCE:184 Failedno arquivo de log. O que eu fiz errado?
Sven
No macOS, há gdateno Homebrew apple.stackexchange.com/a/135749/181223
phil pirozhkov
0

Algo assim

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

Usei% N para nanossegundos (000000000..999999999) desde que não encontrei milissegundos no momento

Johan
fonte
0

Podes tentar:

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

Por alguma razão '' 'é omitido, coloque-o após o eco e no final, ou simplesmente:

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