Преобразовать временную метку миллисекунд на сегодняшний день из командной строки unix

Я знаю о

date -d @<timestamp in seconds>

и

awk '{print strftime("%c", <timestamp in seconds>)}'

но что, если у меня миллисекунды. Есть ли тривиальный способ сделать это, не отбрасывая последние три символа миллисекунды timestamp (не то, что бросающие символы сложны, но я думаю, что для такой простой задачи был бы один шаг)?

Ответы

Ответ 1

Вместо отбрасывания символов вы можете разделить на 1000:

awk '{print strftime("%c", ( <timestamp in milliseconds> + 500 ) / 1000 )}'

Или же:

date -d @$(  echo "(MilliSecondTimeStamp + 500) / 1000" | bc)

Редактировать: с поправкой на коэффициенты вместо деления. Edit2: спасибо zeekvfu, исправлено.

Ответ 2

Что у меня есть в моем профиле bash на Mac:

day() {
  date -r $(($1 / 1000))
}

day 1486743904359 возвращается Fri Feb 10 08:25:04 PST 2017

Ответ 3

perl -e 'print scalar localtime(<timestamp> / 1000)'

Ответ 4

Расширяя подход Greg Perl, я использую этот Perl-скрипт https://github.com/moose1089/epoch2iso, чтобы автоматически сканировать метки времени эпохи и конвертировать в ISO8061.

Этот скрипт обрабатывает секунды и миллисекунды.

Поскольку он преобразует любое найденное число, вам не нужно извлекать определенное поле с временными метками, но, наоборот, оно также может преобразовывать числа, которые не были заданы как времена.