Печать текущего времени в миллисекундах или наносекундах с помощью встроенной функции printf - PullRequest
0 голосов
/ 31 марта 2019

Мы можем напечатать текущее время с помощью встроенной функции printf, без необходимости вызывать внешнюю команду, такую ​​как date, например:

printf '%(%Y-%m-%d:%H:%M:%S)T %s\n' -1
# sample output: 2019-03-30:17:39:36,846

Как мы можем заставить printf печатать также миллисекунды или наносекунды? Использование %3N или %N в строке формата не работает:

printf '%(%Y-%m-%d:%H:%M:%S,%3N)T %s\n' -1 # outputs 2019-03-30:17:38:16,%3N
printf '%(%Y-%m-%d:%H:%M:%S,%N)T %s\n' -1  # outputs 2019-03-30:17:38:16,%N

Однако команда date работает нормально:

date +%Y-%m-%d:%H:%M:%S,%3N # gives 2019-03-30:17:39:36,846
date +%Y-%m-%d:%H:%M:%S,%N  # gives 2019-03-30:17:39:36,160643077

Это на Red Hat Linux версии 7.3.

1 Ответ

1 голос
/ 31 марта 2019

В bash 5 вы можете получить микросекундную точность от EPOCHREALTIME.Однако printf сам по себе не имеет доступа к этому напрямую, поэтому вам нужно извлечь микросекунды самостоятельно.

$ echo $EPOCHREALTIME; printf '%(%F:%T)T.%d\n' "$EPOCHSECONDS" "${EPOCHREALTIME#*.}"; echo $EPOCHREALTIME
1554006709.936990
2019-03-31:00:31:49.937048
1554006709.937083

Это занимает немного времени, но результат, по-видимому, с точностью до 0,05 миллисекунды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...