Jak uzyskać czas od epoki, w milisekundach, w terminalu OSX?
Odpowiednikiem Linux / Ubuntu jest date +%s.%N
:
Linux $ date +%s.%N
1403377762.035521859
Który nie działa w moim terminalu OSX:
OSX $ date +%s.%N
1403377800.N
date
Program w OS X jest inna niż Coreutils GNU date
programu. Możesz zainstalować coreutils (w tym gnu-date), wtedy będziesz mieć wersję date
obsługującą milisekundy.
Ponieważ instalacja ze źródła może być kłopotliwa dla rodzimych użytkowników OS X, radzę używać Homebrew .
Aby zainstalować te narzędzia za pomocą Homebrew, uruchom ten oneliner w swoim terminalu:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Homebrew jest teraz zainstalowany (dobrze jest postępować zgodnie z sugestiami instalatora po instalacji). Teraz zainstalujemy coreutils za pomocą brew
.
brew install coreutils
Jak mówi instalacja, wszystkie komendy zostały zainstalowane z prefiksem „g” (np. Gdate, gcat, gln itp.). Jeśli naprawdę potrzebujesz używać tych poleceń z ich normalnymi nazwami, możesz dodać katalog „gnubin” do PATH ( ~/.bash_profile
), na przykład:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
Możesz teraz biegać
gdate +%s.%N
a to wyda twój czas od epoki w milisekundach.
gdate
został zainstalowany/usr/local/bin/gdate
.date
staje się GNUdate
(zamiast gdate)+%s.%N
format podaje sekundy z dokładnością do nanosekund, a nie milisekund. Po zainstalowaniu naparugdate
sprawdziłem stronę podręcznika, aby sprawdzić, czy milisekundy są dostępne. To nie jest. Nie powiedział też, że można określić dokładność dla%N
, ale i tak spróbowałem. Odkryłem, że polecenie, aby sprowadzić sekundy do precyzji tylko w milisekundach (tj. Trzy miejsca po przecinku), togdate +%s.%3N
.W OS X wystarczy uruchomić,
date +%s
ponieważ OS X nie obsługuje żadnej dokładności większej niż ta wdate
danych wyjściowych, a wszelka nadmierna precyzja nie obsługiwana przez wewnętrzną reprezentację jest obcinana w kierunku minus nieskończoności.Jeśli chcesz otrzymać wynik w milisekundach, możesz użyć następującego polecenia, chociaż wynik jest właśnie korygowany przez dodanie zer zamiast dodawania precyzji z wyżej wymienionego powodu. Poniżej podano prawidłowe milisekundy w systemach obsługujących wymaganą precyzję.
Źródło powyższego polecenia: Unix.SE - Jak uzyskać milisekundy od epoki Uniksa
Jeśli potrzebujesz tylko polecenia zawierającego odpowiednią liczbę zer w systemie OS X, możesz użyć:
źródło
%-N
, więc nic nie robi (i może powodować problemy, jeśli$N
ustawiona jest zmienna powłoki ). Wystarczy użyćdate +%s000
(lubdate +%s.000
jeśli chcesz przecinek dziesiętny).date
przechodzi właśnie%-N
przezN
, może zakłócać obliczenia. Spróbuj ustawićN=7000000000000000000
, a następnie wypróbuj polecenie ... Jest to mało prawdopodobny przypadek w praktyce, ale czułbym się bezpieczniejszy z czymś, co nie zależało od środowiska.to rozwiązanie działa w systemie macOS.
jeśli rozważasz użycie skryptu bash i masz dostępny Python, możesz użyć tego kodu:
Lub napisz
python
skrypt bezpośrednio:źródło
Perl jest wszechobecny.
źródło