914 Stimmen

Ermittelt die aktuelle Zeit in Sekunden seit der Epoche unter Linux, Bash

Ich brauche etwas Einfaches wie date aber in Sekunden seit 1970 anstelle des aktuellen Datums, der Stunden, Minuten und Sekunden.

date scheint diese Option nicht zu bieten. Gibt es einen einfachen Weg?

9 Stimmen

Einige Versionen von date haben es, andere nicht. Es ist also nicht immer vorhanden. Ich habe "type -a date" ausgeführt und eine andere Version verwendet, und das hat funktioniert.

2 Stimmen

FWIW, Ubuntu hat nur /bin/date, für das die Antwort von @Steef funktioniert

1 Stimmen

@TheBonsai das ist nicht Teil der POSIX-Standardversion des 'date'-Tools. Nur weil Ihre Version es hat (wahrscheinlich GNU), sollten Sie nicht davon ausgehen, dass alle Implementierungen es haben.

1655voto

Steef Punkte 30321

Das sollte funktionieren:

date +%s

193voto

pellucide Punkte 3088

Ich möchte nur hinzufügen.

Ermittelt die Sekunden seit der Epoche (1. Januar 1970) für ein beliebiges Datum (z. B. 21. Oktober 1973).

date -d "Oct 21 1973" +%s

Konvertiert die Anzahl der Sekunden in ein Datum zurück

date --date @120024000

Der Befehl date ist ziemlich vielseitig. Eine weitere coole Sache, die man mit Datteln machen kann (schamlos kopiert von date --help ). Zeigen Sie die Ortszeit für 9 Uhr nächsten Freitag an der Westküste der USA an

date --date='TZ="America/Los_Angeles" 09:00 next Fri'

Noch besser ist es, sich die Zeit zu nehmen, die Manpage zu lesen http://man7.org/linux/man-pages/man1/date.1.html

111voto

Socowi Punkte 22288

Reine Bash-Lösung

Desde bash 5.0 ( veröffentlicht am 7. Jan. 2019 ) können Sie die eingebaute Variable EPOCHSECONDS .

$ echo $EPOCHSECONDS
1547624774

もあります。 EPOCHREALTIME die Bruchteile von Sekunden einschließt.

$ echo $EPOCHREALTIME
1547624774.371210

EPOCHREALTIME kann durch Entfernen des Dezimalpunkts in Mikrosekunden (s) umgewandelt werden. Dies könnte von Interesse sein, wenn man bash die eingebaute Arithmetik (( expression )) die nur ganze Zahlen verarbeiten kann.

$ echo ${EPOCHREALTIME/./}
1547624774371210

In allen obigen Beispielen sind die gedruckten Zeitwerte zur besseren Lesbarkeit gleich. In Wirklichkeit wären die Zeitwerte unterschiedlich, da jeder Befehl eine kleine Zeitspanne für seine Ausführung benötigt.

65voto

gniourf_gniourf Punkte 41590

Bislang verwenden alle Antworten das externe Programm date .

Seit Bash 4.2, printf hat einen neuen Modifikator %(dateformat)T die, wenn sie mit dem Argument -1 gibt das aktuelle Datum im Format aus, das durch dateformat , bearbeitet von strftime(3) ( man 3 strftime für Informationen über die Formate).

Also, für eine reine Bash-Lösung:

printf '%(%s)T\n' -1

oder wenn Sie das Ergebnis in einer Variablen speichern müssen var :

printf -v var '%(%s)T' -1

Keine externen Programme und keine Subshells!

Seit Bash 4.3 ist es sogar möglich, die Option -1 :

printf -v var '%(%s)T'

(aber es könnte klüger sein, immer das Argument -1 nichtsdestotrotz).

Wenn Sie -2 als Argument anstelle von -1 verwendet die Bash die Zeit, zu der die Shell gestartet wurde, anstelle des aktuellen Datums. Dies kann verwendet werden, um verstrichene Zeiten zu berechnen

$ printf -v beg '%(%s)T\n' -2
$ printf -v now '%(%s)T\n' -1
$ echo beg=$beg now=$now elapsed=$((now-beg))
beg=1583949610 now=1583953032 elapsed=3422

57voto

Zombo Punkte 1

Bei den meisten Awk-Implementierungen:

awk 'BEGIN {srand(); print srand()}'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X