Як я отримую час з епохи, в мілісекундах, в терміналі OSX?
Еквівалент Linux / Ubuntu date +%s.%N
:
Linux $ date +%s.%N
1403377762.035521859
Що не працює в моєму терміналі OSX:
OSX $ date +%s.%N
1403377800.N
Як я отримую час з епохи, в мілісекундах, в терміналі OSX?
Еквівалент Linux / Ubuntu date +%s.%N
:
Linux $ date +%s.%N
1403377762.035521859
Що не працює в моєму терміналі OSX:
OSX $ date +%s.%N
1403377800.N
Відповіді:
date
Програми в OS X відрізняється від Coreutils ГНУ date
програми. Ви можете встановити coreutils (включаючи gnu-date), тоді у вас буде версія, date
яка підтримує мілісекунди.
Оскільки установка з джерела може скласти клопот для рідних користувачів ОС X, я раджу використовувати Homebrew .
Щоб встановити ці інструменти за допомогою Homebrew, запустіть цей oneliner у своєму терміналі:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Тепер встановлено Homebrew (розумно дотримуватися пропозицій інсталятора після встановлення). Тепер ми встановимо coreutils за допомогою brew
.
brew install coreutils
Як говорить установка, всі команди були встановлені з префіксом 'g' (наприклад, gdate, gcat, gln, тощо, тощо). Якщо вам справді потрібно використовувати ці команди зі своїми звичайними іменами, ви можете додати каталог "gnubin" у свій PATH ( ~/.bash_profile
), наприклад:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
Тепер ви можете бігти
gdate +%s.%N
і це видасть ваш час з епохи в мілісекундах.
date
стає GNU date
(замість gdate)
+%s.%N
формат дає секунди до наносекундної точності, а не мілісекунд. Після того, як я застосував пивоваріння для встановлення gdate
, я перевірив сторінку, щоб побачити, чи є мілісекунди. Це не. Він також не сказав, що точність для цього %N
можна вказати, але я все-таки спробував. Я виявив, що команда звести секунди до точності лише мілісекунди (тобто три десяткових знаки) є gdate +%s.%3N
.
В OS X просто запустіть, date +%s
оскільки OS X не підтримує більше точності, ніж це у date
вихідних даних, і будь-яка надмірна точність, не підтримувана внутрішнім представництвом, скорочена до мінус нескінченності.
Якщо ви хочете виводити мілісекунди, ви можете скористатися наступною командою, хоча виведення просто виправляється додаванням нулів, а не додаванням точності через вищезазначену причину. Далі виводиться правильна мілісекунда в системах, які підтримують необхідну точність.
echo $(($(date +'%s * 1000 + %-N / 1000000')))
Джерело для вищезгаданої команди: Unix.SE - Як отримати мілісекунди з епохи Unix
Якщо ви просто хочете команду, яка додає потрібну кількість нулів в OS X, ви можете використовувати:
date +%s000
%-N
, тому нічого не робить (і може спричинити проблеми, якщо встановлена змінна оболонки $N
). Просто скористайтеся date +%s000
(або, date +%s.000
якщо ви хочете, десятковою комою).
date
команда OS X просто проходить %-N
через N
, вона може перешкоджати обчисленню. Спробуйте встановити N=7000000000000000000
, потім спробуйте команду ... Це малоймовірний випадок на практиці, але я б почувався безпечнішим у тому, що не залежало від оточення.
це рішення працює на macOS.
якщо ви розглядаєте можливість використання bash-скрипту та наявний python, ви можете використовувати цей код:
#!/bin/bash
python -c 'from time import time; print int(round(time() * 1000))'
Або написати python
сценарій безпосередньо:
#!/usr/bin/python
from time import time
print int(round(time() * 1000))
gdate
встановлений в/usr/local/bin/gdate
.