Jak uzyskać bieżący czas uniksowy w milisekundach (tj. Liczbę milisekund od epoki Uniksa 1 stycznia 1970 r.)?
232
date +%s
zwróci liczbę sekund od epoki.
date +%s%N
zwraca sekundy i bieżące nanosekundy.
date +%s%N | cut -b1-13
poda liczbę milisekund od epoki - bieżące sekundy plus trzy lewe nanosekundy.
i od MikeyB - echo $(($(date +%s%N)/1000000))
(dzielenie przez 1000 powoduje tylko mikrosekundy)
echo $(($(date +%s%N)/1000))
Możesz po prostu
%3N
skrócić nanosekundy do 3 najbardziej znaczących cyfr (które następnie są milisekundami):Działa to np. Na moim kubuntu 12.04.
Należy jednak pamiętać, że
%N
może to nie zostać zaimplementowane w zależności od systemu docelowego. Np. Przetestowany na systemie wbudowanym (rootro-y rootkompilacji, skompilowane przy użyciu łańcucha krzyżowego ramienia innego niż HF) nie było%N
:(A także mój (nie zrootowany) tablet z Androidem nie ma
%N
).źródło
1397392146%3N
się1397392146%N
, ale wyjście1397392146%3N
jest to, że co bym nie widział na konsoli BusyBox mojego Android tabletki. Czy możesz wyjaśnić swoją edycję?date +%s.%3N
odbitki1510718281.134
.date +%N
nie działa w systemie OS X, ale możesz użyć jednego z nichruby -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
źródło
node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
coreutils
Po prostu to wyrzucamy, ale myślę, że poprawna formuła z podziałem będzie:
źródło
Moje rozwiązanie nie jest najlepsze, ale zadziałało dla mnie.
date +%s000
Po prostu potrzebowałem przekonwertować datę taką jak 2012-05-05 na milisekundy.
źródło
Dla osób, które sugerują uruchomienie programów zewnętrznych, aby uzyskać milisekundy ... w tym tempie, równie dobrze możesz to zrobić:
Chodzi o to: przed wybraniem jakiejkolwiek odpowiedzi z tego miejsca, pamiętaj, że nie wszystkie programy będą działać w ciągu jednej sekundy. Pomiar!
źródło
date
Uruchomienie nawet na bardzo szybkiej maszynie i7 zajmuje 3 ms.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:
źródło
Jeśli szukasz sposobu na wyświetlenie czasu działania skryptu, poniższe wyniki zapewnią (nie do końca dokładny) wynik:
Tak blisko początku skryptu, jak to możliwe, wprowadź następujące dane
basetime=$(date +%s%N)
To da ci wartość początkową czegoś takiego jak 1361802943996000000
Na końcu skryptu użyj następujących poleceń
echo "runtime: $(echo "scale=3;($(date +%s%N) - ${basetime})/(1*10^09)" | bc) seconds"
który wyświetli coś podobnego
runtime: 12.383 seconds
Uwagi:
(1 * 10 ^ 09) można zastąpić 1000000000, jeśli chcesz
"scale=3"
to raczej rzadkie ustawienie, które zmuszabc
do robienia tego, co chcesz. Jest o wiele więcej!Testowałem to tylko na Win7 / MinGW ... Nie mam pod ręką odpowiedniego * nix boxa.
źródło
time <script>
Oto, jak uzyskać czas w milisekundach bez wykonywania podziału. Może jest szybciej ...
Aktualizacja: Kolejna alternatywa w czystym bashu, która działa tylko z,
bash 4.2+
jest taka sama jak powyżej, ale użyj,printf
aby uzyskać datę. Będzie to zdecydowanie szybsze, ponieważ żaden główny proces nie zostanie rozwidlony.Innym haczykiem jest to, że twoja
strftime
implementacja powinna obsługiwać,%s
a%N
to NIE jest przypadek na mojej maszynie testowej. Zobaczman strftime
obsługiwane opcje. Zobacz takżeman bash
zobaczprintf
składnię.-1
i-2
są specjalnymi wartościami dla czasu.źródło
strftime(3)
nie obsługuje,%N
więc nie ma mowy oprintf
drukowaniu nanosekund. Używam Ubuntu 14.04.date
wydaje się bardziej niezawodną opcją.Najdokładniejszy znacznik czasu, jaki możemy uzyskać (przynajmniej dla Mac OS X), to prawdopodobnie:
Musimy jednak pamiętać, że uruchomienie zajmuje około 30 milisekund. Możemy go wyciąć do skali ułamka dwucyfrowego i na samym początku obliczyć średni narzut odczytu czasu, a następnie usunąć go z pomiaru. Oto przykład:
Możesz odkomentować polecenia echa, aby zobaczyć, jak to działa.
Wyniki dla tego skryptu są zwykle jednym z 3 następujących wyników:
źródło
Użycie daty i wyrażenia może cię tam doprowadzić, tj
Po prostu rozwiń, aby zrobić, co chcesz
Zdaję sobie sprawę, że to nie daje milisekund od epoki, ale nadal może być przydatne jako odpowiedź na niektóre przypadki, wszystko zależy od tego, do czego tak naprawdę potrzebujesz, pomnóż przez 1000, jeśli potrzebujesz liczby milisekund: D
Najprostszym sposobem byłoby stworzenie małego pliku wykonywalnego (od C np.) I udostępnienie go skryptowi.
źródło
date
wielokrotnym uruchomieniem . W niektórych przypadkach data lub godzina mogą się zmieniać między uruchomieniami w miarę zapisywania polecenia. Lepiej uruchomićdate
raz, przeanalizować części i wykonać obliczenia. Byłby to jeden z kilku sposobówt=$(date +%H%M%S); (( x = ${t:0:2} * 3600 + ${t:2:2} * 60 + ${t:4:2} )); echo "$x"
. To używa składni Bash, ponieważ pytanie jest oznaczone jako bash . Jak wspominasz, twoja odpowiedź (i moja odmiana) daje tylko sekundy dla bieżącego dnia, a nie od Epoki, a nie w milach.(powtórz z góry)
date +%N
nie działa w systemie OS X, ale możesz również użyć:Perl (wymaga modułu Time :: Format). Być może nie jest to najlepszy moduł CPAN do użycia, ale wykonuje zadanie. Time :: Format jest ogólnie udostępniany z dystrybucjami.
źródło
date
nie można go użyć i nie ma poleceń typu bash, które zaspokoją potrzebę.date
nie może być użyty jako część twojej odpowiedzi , usunę moją opinię.Łącząc wszystkie poprzednie odpowiedzi w systemie OSX
możesz to zrobić
źródło
Jeśli chcesz wykonać proste obliczenia dotyczące powłoki, jest to łatwe i przenośne, korzystając z powyższej odpowiedzi:
źródło
W przypadku alpejskiego linuxa (wiele obrazów dokerów) i ewentualnie innych minimalnych środowisk linuksowych możesz nadużywać
adjtimex
:adjtimex
służy do odczytu (i ustawiania) zmiennych czasowych jądra. Dziękiawk
możesz uzyskać mikrosekundy,head
możesz użyć tylko pierwszych 3 cyfr.Nie mam pojęcia, jak wiarygodne jest to polecenie.
Uwaga: bezwstydnie skradzione z tej odpowiedzi
źródło