Преобразовать временную метку миллисекунд на сегодняшний день из командной строки 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.
Этот скрипт обрабатывает секунды и миллисекунды.
Поскольку он преобразует любое найденное число, вам не нужно извлекать определенное поле с временными метками, но, наоборот, оно также может преобразовывать числа, которые не были заданы как времена.