Как узнать текущее время Unix в миллисекундах (т. Е. Количество миллисекунд с начала Unix 1 января 1970 года)?
232
date +%s
вернет количество секунд с начала эпохи.
date +%s%N
возвращает секунды и текущие наносекунды.
date +%s%N | cut -b1-13
даст вам количество миллисекунд с начала эпохи - текущие секунды плюс три оставшиеся наносекунды.
и от MikeyB - echo $(($(date +%s%N)/1000000))
(деление на 1000 приносит только микросекунды)
echo $(($(date +%s%N)/1000))
Вы можете просто использовать,
%3N
чтобы урезать наносекунды до 3 самых значащих цифр (которые тогда являются миллисекундами):Это работает, например, на моем Kubuntu 12.04.
Но имейте в виду, что
%N
это не может быть реализовано в зависимости от вашей целевой системы. Например, тестирование во встроенной системе (buildroot rootfs, скомпилированный с использованием не-HF-кросс-цепочки инструментов) не было%N
:(А также у моего (не рутированного) планшета Android нет
%N
).источник
1397392146%3N
к1397392146%N
, но вывод в1397392146%3N
том , что то , что я действительно видел на BusyBox консоли моего андроид планшета. Не могли бы вы объяснить ваши изменения?date +%s.%3N
печать1510718281.134
.date +%N
не работает на OS X, но вы можете использовать один изruby -e 'puts Time.now.to_f'
python -c 'import time; print time.time()'
node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
DateTime.utc_now() |> DateTime.to_unix(:millisecond)
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
источник
node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
coreutils
Просто добавлю это, но я думаю, что правильная формула с делением была бы:
источник
Мое решение не лучшее, но сработало для меня.
date +%s000
Мне просто нужно было преобразовать дату, например 2012-05-05, в миллисекунды.
источник
Для людей, которые предлагают запускать внешние программы, чтобы получить миллисекунды ... с такой скоростью, вы могли бы также сделать это:
Суть в том, что перед тем, как выбрать любой ответ отсюда, имейте в виду, что не все программы будут работать менее одной секунды. Мера!
источник
date
для запуска требуется 3 мс.это решение работает на macOS.
если вы планируете использовать bash-скрипт и имеете Python, вы можете использовать этот код:
источник
Если вы ищете способ отображения времени, в течение которого выполнялся ваш скрипт, следующий результат даст (не совсем точный) результат:
Как можно ближе к началу вашего сценария введите следующее
basetime=$(date +%s%N)
Это даст вам начальную стоимость чего-то вроде 1361802943996000000
В конце вашего скрипта используйте следующее
echo "runtime: $(echo "scale=3;($(date +%s%N) - ${basetime})/(1*10^09)" | bc) seconds"
который будет отображать что-то вроде
runtime: 12.383 seconds
Примечания:
(1 * 10 ^ 09) можно заменить на 1000000000, если вы хотите
"scale=3"
это довольно редкая настройка, которая заставляетbc
делать то, что вы хотите. Есть много больше!Я проверял это только на Win7 / MinGW ... У меня нет подходящего * nix-бокса.
источник
time <script>
Вот как можно получить время в миллисекундах без деления. Может быть, это быстрее ...
Обновление: другая альтернатива в чистом bash, которая работает только с
bash 4.2+
тем же, что и выше, но используетсяprintf
для получения даты. Это определенно будет быстрее, потому что ни один из процессов не разветвляется.Еще один улов здесь, однако, заключается в том, что ваша
strftime
реализация должна поддерживать,%s
а%N
это НЕ на моем тестовом компьютере. Смотритеman strftime
для поддерживаемых вариантов. Также смотрите,man bash
чтобы увидетьprintf
синтаксис.-1
и-2
являются специальными значениями для времени.источник
strftime(3)
не поддерживает,%N
так что нет возможности дляprintf
печати наносекунд. Я использую Ubuntu 14.04.date
кажется более надежным вариантом.Наиболее точная временная метка, которую мы можем получить (по крайней мере, для Mac OS X), вероятно, такова:
Но мы должны помнить, что для запуска требуется около 30 миллисекунд. Мы можем сократить его до шкалы из двухзначной дроби и в самом начале вычислить средние накладные расходы на считывание времени, а затем убрать его из измерения. Вот пример:
Вы можете раскомментировать команды echo, чтобы лучше понять, как она работает.
Результаты для этого сценария обычно являются одним из этих 3 результатов:
источник
Использование date и expr может привести вас туда, т.е.
Просто расширьте его, чтобы делать все, что вы хотите
Я понимаю, что это не дает миллисекунд с начала эпохи, но это может все еще быть полезным в качестве ответа для некоторых случаев, все зависит от того, для чего это действительно нужно, умножьте на 1000, если вам нужно число в миллисекундах: D
Простейшим способом было бы сделать небольшой исполняемый файл (из Cf.ex.) и сделать его доступным для скрипта.
источник
date
несколько раз. В некоторых случаях дата или время могут меняться между запусками во время написания вашей команды. Лучше запуститьdate
один раз, разобрать детали и выполнить расчет. Один из нескольких способов сделать это будетt=$(date +%H%M%S); (( x = ${t:0:2} * 3600 + ${t:2:2} * 60 + ${t:4:2} )); echo "$x"
. При этом используется синтаксис Bash, поскольку вопрос помечен как bash . Как вы намекаете, ваш ответ (и мой вариант) пока дают только секунды для текущего дня, а не со времен эпохи и не в миллис.(повторите выше)
date +%N
не работает на OS X, но вы также можете использовать:Perl (требуется модуль Time :: Format). Возможно, не самый лучший модуль CPAN для использования, но выполняет свою работу. Time :: Format обычно предоставляется с дистрибутивами.
источник
date
не может быть использовано, и нет команд только для bash, которые отвечают потребности.date
нельзя использовать как часть вашего ответа , я бы убрал свое отрицательное мнение.Собираем все вместе предыдущие ответы, когда в OSX
ты можешь делать как
источник
Если вы хотите простое вычисление по окончании оболочки, это легко и переносимо, используя приведенный выше ответ:
источник
Для Alpine Linux (много образов Docker) и, возможно, других минимальных сред Linux, вы можете злоупотреблять
adjtimex
:adjtimex
используется для чтения (и установки) переменных времени ядра. С помощьюawk
вы можете получить микросекунды, с помощьюhead
вы можете использовать только первые 3 цифры.Я понятия не имею, насколько надежна эта команда.
Примечание: бесстыдно украден из этого ответа
источник