Powiązane pytanie to „Datetime To Unix timestamp” , ale to pytanie jest bardziej ogólne.
Potrzebuję uniksowych znaczników czasu, aby rozwiązać moje ostatnie pytanie. Moje zainteresowania to Python, Ruby i Haskell, ale inne podejścia są mile widziane.
Jaki jest najłatwiejszy sposób na wygenerowanie uniksowych znaczników czasu?
unix
unix-timestamp
Léo Léopold Hertz 준영
źródło
źródło
gettimeofday
jest nazwa wywołania systemowego POSIX i Linux: stackoverflow.com/questions/11765301/... TODO: dlaczegostrace date +%d
nie zadzwonić?Odpowiedzi:
W systemie Linux lub MacOS możesz użyć:
gdzie
+%s
, sekundy od 1970-01-01 00:00:00 UTC. (Podręcznik GNU Coreutils 8.24)Przykładowy wynik teraz 1454000043.
źródło
date
zwykle jest zdefiniowany w POSIX.2./usr/bin/date +%s and
/ usr / xpg4 / bin / date +% s`. W połączeniu z zaleceniem POSIX.2 myślę, że działa to również na wszystkich systemach Solaris.date -v+60S +%s
aby dodać 1 dzień:date -v+24H +%s
i tak dalej. . .w Ruby:
źródło
Time.zone.now.to_i
. Chociaż da to to samo o / p,Time.now.to)_i
aleTime.zone.now.to_i
jest na toRails
sposób../bin/rails runner "p Time.current.to_i"
to inne rozwiązanie.W pythonie dodaj następujące wiersze, aby uzyskać znacznik czasu:
źródło
curl icanhazepoch.com
Zasadniczo są to uniksowe znaczniki czasu jako usługa (UTaaS)
źródło
curl -L -H "Accept: application/json" unixtimesta.mp
da ci{"datetime":"Thu, 19 Jul 2018 12:01:21 GMT","timestamp":1532001681}
W Perlu:
źródło
Polecenie uniksowe „data” jest zaskakująco wszechstronne.
Pobiera dane wyjściowe
date
, które będą w formacie zdefiniowanym przez -f, a następnie drukuje je (-j mówi, nie próbuj ustawiać daty) w postaci +% s, sekund od epoki.źródło
date: invalid option -- 'j'
gdzie (GNU Coreutils 8.24 Data manual)
+%s
, sekundy od 1970-01-01 00:00:00 UTC+%N
, nanosekundy (000000000..999999999) od epokiPrzykładowy wynik teraz
1454000043.704350695
. Zauważyłem, że instrukcja BSDdate
nie zawiera dokładnego wyjaśnienia flagi+%s
.źródło
+$N
? Czy jest on zawarty w sygnaturze czasowej UNIX w niektórych systemach?%N
nie jest udokumentowana strona podręcznika dla daty w macOS 10.13.1 (High Sierra) i nie działa. Wyjście próbki mam to:1523342391.N
.gdate
w Homebrew apple.stackexchange.com/a/135749/181223Przede wszystkim uniksowa „epoka” lub zero to 1970-01-01 00: 00: 00Z (co oznacza północ 1 stycznia 1970 r. W strefie czasowej Zulu, GMT lub UTC). Uniksowy znacznik czasu to liczba sekund od tego czasu - nie uwzględniająca sekund przestępnych.
Generowanie bieżącego czasu w Perlu jest raczej łatwe:
Generowanie czasu odpowiadającego danej wartości daty / godziny jest raczej mniej łatwe. Logicznie używasz
strptime()
funkcji z POSIX. Jednak moduł Perl POSIX :: strptime (który jest niezależny od modułu POSIX) ma podpis:Funkcja
mktime
w module POSIX ma sygnaturę:Tak więc, jeśli znasz format swoich danych, możesz napisać wariant na:
źródło
Dla kompletności PHP:
W BASH:
źródło
date
polecenie, więc nie sądzę, aby trzeba było wywoływać php stamtąd.w Haskell
w Go
w C.
w Swift
źródło
W Haskell ...
Aby odzyskać jako POSIXTime:
Jako liczba całkowita:
źródło
źródło
Spróbujmy JavaScript :
... lub jeszcze ładniejsze, podejście statyczne:
W obu przypadkach
1000
dzielę przez, aby przejść od sekund do milisów i używamMath.floor
tylko do reprezentowania pełnych sekund, które minęły (w porównaniu do zaokrąglania, które mogą zaokrąglać w górę do pełnej sekundy, która jeszcze nie minęła).źródło
milliseconds
nie zwracają sekund, a uniksowy znacznik czasu to liczba,seconds
która upłynęła od 1 stycznia 1970 r. 00:00 UTC. Możesz użyć JS, po prostu podziel przez 1000 i zaokrąglij:Math.round(Date.now()/1000)
Math.floor
zamiastMath.round
. Na zdrowieJeśli potrzebujesz znacznika czasu Unix ze skryptu powłoki (rodzina Bourne: sh, ksh, bash, zsh, ...), powinno to działać na dowolnej maszynie uniksowej, w przeciwieństwie do innych sugestii (perl, haskell, ruby, python, data GNU ), jest oparty na standardowej komendzie i funkcji POSIX.
źródło
W Bash 5 jest nowa zmienna:
Lub jeśli chcesz wyższą precyzję (w mikrosekundach):
źródło
Jeśli chcę wydrukować datę i godzinę utc za pomocą polecenia date, muszę użyć argumentu -u z poleceniem date.
Przykład
Wynik
źródło
nawk:
źródło
W NodeJS wystarczy otworzyć terminal i wpisać:
node -e "console.log(new Date().getTime())"
lubnode -e "console.log(Date.now())"
źródło