In einem Bash-Skript möchte ich die aktuelle Datumszeit im ISO 8601- Format (vorzugsweise UTC) drucken , und es scheint, dass dies so einfach sein sollte wie date -I
:
http://ss64.com/bash/date.html
Aber das scheint auf meinem Mac nicht zu funktionieren:
$ date -I
date: illegal option -- I
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Und in der Tat man date
listet diese Option nicht auf.
Weiß jemand, warum dies oder eine andere (einfache) Möglichkeit für mich ist, das Datum im ISO 8601-Format zu drucken? Vielen Dank!
2011-08-27
und2011-08-27T18:55:43Z
sind ISO 8601-Formate. In der Tat wäre das Bearbeiten der Frage hilfreicher als das Scannen von Updates über mehrere Kommentare hinweg. Ein Beispiel für das, was Sie drucken möchten, wäre ideal.brew
(das Präfix 'g' verwendet)gdate -I
hat zusammen mit anderen GNU-Flags funktioniert.Antworten:
Du könntest benutzen
Verwenden Sie für ein vollständig ISO-8601-konformes Datum eines der folgenden Formate:
Ausgabe:
oder
Ausgabe:
quelle
date -u +"%Y-%m-%dT%H:%MZ"
genau das habe ich gesucht.Z
und+00:00
sind die gleichen (meistens). Zum Zwecke der Zeitübersetzung bedeuten beide UTC. England ist jedoch+00:00
im Winter und+01:00
im Sommer (BST).Z
UTC, während+00:00
GMT ist. UTC ist keine Zeitzone und hat keinen Offset. Offset ist definiert als die Zeitdifferenz zwischen einer Zeitzone und UTC, dem Standard der Zeitmessung. GMT ist +00: 00 von UTC entfernt (und BST ist, wie Sie sagen, +01: 00 von UTC entfernt).In GNU Datum
date -I
ist das gleiche wiedate +%F
und-Iseconds
und-Iminutes
auch Zeit ist mit UTC - Offset.-u
ist wieTZ=UTC
.+00:00
kann durch ersetzt werdenZ
.Dies sind auch gültige Datums- oder Zeitformate nach ISO 8601:
Diese sind nicht:
quelle
Eine kurze Alternative, die sowohl am GNU- als auch am BSD-Datum funktioniert, ist:
quelle
date -u +%FT%TZ
weil in UTC Offset sowieso Null wäreDas Coreutils-Paket enthält GNU-Versionen von Tools. Installieren:
Sie können sehen, was bereitgestellt wird:
Beachten Sie, dass es mit Datum kommt:
Dies ist der Standard-GNU-Datumsbefehl, daher wird der Schalter -I benötigt:
quelle
gdate --iso-8601=ns
:: 2016-09-29T16: 54: 23,485230000 + 02: 00Verwenden Sie einfach normale
date
Formatierungsoptionen:Bearbeiten: Um Zeit und UTC einzuschließen, sind diese äquivalent:
quelle
Es ist kein Feature von Bash, es ist ein Feature der
date
Binärdatei. Unter Linux haben Sie normalerweise die GNU Coreutils-Version vondate
, während Sie unter OSX die BSD-Legacy-Dienstprogramme haben. Die GNU-Version kann sicherlich als optionales Paket installiert werden, oder Sie können Ihren eigenen Ersatz rollen - ich glaube, es sollte ein einfacher Einzeiler sein, z. B. in Perl.quelle
Wenn Sie die anderen Antworten noch einen Schritt weiter gehen, können Sie Ihrem ~ / .bashrc oder ~ / .zshrc eine Funktion hinzufügen, um das Datumsflag hinzuzufügen
-I
:quelle
Es gibt ein vorkompiliertes
coreutils
Paket für Mac OS X unter:http://rudix.org/packages-abc.html#coreutils .
quelle