Este comando produzirá o seguinte:
date --iso-8601=ns
2025-04-04T12:10:16,045431370+02:00
De acordo com man date
o ns
está documentado da seguinte forma:
-I[FMT], --iso-8601[=FMT]
output date/time in ISO 8601 format. FMT='date' for date only (the default), 'hours', 'minutes', 'seconds',
or 'ns' for date and time to the indicated precision.
A parte confusa é 'ns' for date and time to the indicated precision
O que exatamente é "precisão indicada"? O que é ns
?
Particularmente, quero saber o significado do número 045431370
na saída de2025-04-04T12:10:16,045431370+02:00
Como interpretar 045431370
números? E o que é ns
opção?
a propósito. Imagino +02:00
que signifique deslocamento UTC? ou UTC +2
?
ns
aqui estão os nanosegundos: a data e a hora são exibidas com precisão de nanosegundos (se isso é preciso ou não é outra questão). Sua data significa 4 de abril de 2025, às 12:10:16 (horas, minutos, segundos) e 45431370 nanosegundos, ou seja, 45 milissegundos, 431 microssegundos e 370 nanosegundos, duas horas à frente do UTC (então o horário UTC era 10:10:16).A
date
página de manual do GNU não explica isso (é apenas um esboço derivado da saída dodate --help
qual muito permanece curto), mas o manual completo, disponível nos formatos info/dvi/pdf/html (o mesmo que pode ser encontrado online em gnu.org para a versão mais recente) explica (vejainfo -- ls --iso-8601
em um sistema GNU).Em vez de usar a
--iso-8601[=FMT]
opção, você também pode especificar o formato manualmente com+format
onde você poderá usar a precisão que precisar para a parte dos segundos e alterar o caractere de base decimal de,
¹ para o estilo inglês,.
se desejar. Por exemplo:Aqui mostramos a parte dos segundos (
32.3052
) com 4 dígitos após o ponto (10.000º de segundo)².Observe que nenhum dos
--iso-8601
,%N
,%:z
são padrão nem portáteis.¹ A vírgula é o caractere de base decimal usado na maioria das partes do mundo que não falam inglês e, embora a ISO8601 permita ambos
.
e,
para a segunda parte, ela diz que,
é preferível, o que provavelmente é o motivo pelo qual o GNUdate
escolheu,
,.
embora muitos de seus outros padrões sejam baseados no inglês dos EUA.² Observe que ( x com valor padrão 9) é sempre preenchido com 0 para x dígitos, de modo que um milissegundo após a meia-noite será exibido como você esperaria e não o que seria incorreto, pois significa um decisegundo após a meia-noite.
%xN
date +%T.%3N
00:00:00.001
00:00:00.1