Comanda date
nu oferă așa ceva, ceea ce este un pic trist, deoarece RFC-3339 este format modern, răspândit, sănătos, folosit peste tot (cu excepția e-mailurilor care nu sunt nici moderne, nici sănătos).
Decalajul fusului meu orar este în prezent -08: 00, deci cea mai simplă formă a acestei comenzi ar trebui să tipărească ora curentă ca 2013-09-05T14:58:33.102-08:00
.
Comentarii
Răspuns
Se pare că puteți face mai multe formate folosind trecerea la implementarea GNU a date
(versiunea 5.90 sau mai mare), --rfc3339=
.
Exemple
$ date --rfc-3339=date 2014-03-19 $ date --rfc-3339=seconds 2014-03-19 18:00:05-04:00 $ date --rfc-3339=ns 2014-03-19 18:00:08.179780629-04:00
Dacă doriți ca T
să fie adăugat, ca hack:
$ date --rfc-3339=seconds | sed "s/ /T/" 2014-03-19T18:35:03-04:00
Dacă îl doriți în milisecunde :
$ date --rfc-3339=ns | sed "s/ /T/; s/\(\....\).*\([+-]\)/\1\2/g" 2014-03-19T18:42:52.362-04:00
Referințe
Comentarii
- În aceste zile, nu este nevoie de niciun hack pentru a obține ‘ T ‘.
--iso-8601' option accepts the same arguments as
–rfc-3339` și include ‘ T ‘ ieșire. - Partea
s/\(\....\).*-/\1-/g
Sed ar trebui să fies/\(\....\).*\([+-]\)/\1\2/g
pentru a funcționa și la est de Atlantic. - @svante – Vă mulțumim pentru detalii, remediate.
- @Eonil care de fapt nu este corect, RFC3339 afirmă:
NOTE: ISO 8601 defines date and time separated by "T".
În timp ce RFC3339 vă permite să utilizați un spațiu în schimb. Citiți ietf.org/rfc/rfc3339.txt Secțiunea 5.6 - @ rwenz3l Vina mea. Tocmai am citit doar partea ABNF și am ratat notele. Vă mulțumim că l-ați subliniat!
Răspundeți
Cu GNU date
(5,90 sau mai mare):
$ TZ=America/Anchorage date "+%FT%T.%N%:z" 2014-03-19T14:29:31.041119357-08:00
Înlocuiți %N
cu %3N
pentru milisecunde, %6N
pentru micro-secunde …
AFAIK, niciuna dintre specificațiile POSIX, Unix sau LSB nu specifică nicio comandă care poate afișa orele cu sub-secundă granularitate, dar partea fracționată este opțională în RFC 3339.
POSIX / Unix / LSB strftime acceptă %z
pentru a afișa decalajul TZ ca -0800
, deci cel mai portabil pe care probabil îl veți obține este:
$ TZ=America/Anchorage perl -MPOSIX -le "$t = strftime "%Y-%m-%dT%T%z", localtime; $t =~ s/..$/:$&/; print $t" 2014-03-19T14:30:23-08:00
Răspuns
De asemenea, puteți formata ora în funcție de RFC3339 (ISO8601) mai ușor:
$ date -u +"%Y-%m-%dT%H:%M:%SZ" 2016-11-08T08:52:55Z
NOTĂ: Acest formular at este, de asemenea, utilizat în Label Schema Convention RC 1.0
Comentarii
- ‘ nu este un RFC3339 valid. Răspunsul lui Eran ‘ din „„ data +% Y-% m-% dT% T% z “„ este corect și mai puține caractere. Dacă doriți în semnul UTC pass -u, care va elimina compensarea fusului orar.
- Cu semnalizatorul
-u
acest răspuns este corect, nu? - @briceburg de ce nu este valabil RFC3339? Conform tools.ietf.org/html/rfc3339#section-5.6 pare a fi corect din câte îmi dau seama.
Răspuns
GNU date
are formatul ISO-8601 încorporat – nu este destul de apropiat sau chiar identic cu RFC-3339?
1065 % date --iso-8601=seconds 2014-03-19T16:51:16-0600
Comentarii
- ISO-8601 permite diferite formatări de date și ore, dar cred că OP solicită în mod specific formatul Data W3C ” Data completă plus ore, minute, secunde și o fracție zecimală de secundă YYYY-MM-DDThh: mm: ss.sTZD (ex. 1997-07-16T19: 20: 30.45 + 01: 00) ” – Format date și oră W3C .
Răspuns
Ce zici de bun vechi:
$ date +%Y-%m-%dT%T%z 2015-10-29T14:47:06+0200
Comentarii
- Unde sunt informațiile privind fusul orar?
- Acest lucru funcționează atât pe Mac, cât și pe Linux ‘ data ‘
- Ce zici de milisecunde?
- notă rapidă aici, fără a deschide RFC, segmentul fusului orar,
0200
lipsește un punct, care poate rupe unele sisteme care o necesită. - Nota @MikeMackintosh ‘ este pertinentă; rezultatul prezentat aici nu este o o dată legală RFC 3339. Coloanele din segmentul fusului orar sunt necesare pentru RFC 3339; consultați definiția
time-numoffset
la tools.ietf.org/html/rfc3339#section-5.6 .
Răspuns
echo "Local date only:" date "+%Y-%m-%d" echo echo "Local date and time:" date "+%Y-%m-%dT%H:%M:%S%z" | sed "s@^.\{22\}@&:@" echo echo "UTC date and time:" date -u "+%Y-%m-%dT%H:%M:%SZ"
Aceste comenzi sunt compatibile cu POSIX, cu excepția din specificația de conversie %z
. Cu toate acestea, %z
este acceptat pe scară largă și funcționează în același mod în Linux, MacOS, FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, Solaris, Minix și Haiku. De asemenea, funcționează cu instrumentele din Busybox, Toybox și sbase (utilitarele sistemului de bază suckless.org). Deoarece %z
generează compensarea fusului orar în format ±HHMM
, avem nevoie de conducta sed
pentru a adăuga două puncte și schimbați-l în ±HH:MM
.
NOTĂ: Comanda Heirloom „s date
are incompatibil %z
ieșire: nu imprimă un semn +
.
2013-09-05 14:58:33.102 -0800
, cu excepția cazului în care Este un motiv pentru care spațiile nu trebuie folosite deloc.