date
-kommandoen tilbyr ikke noe slikt, noe som er litt trist siden RFC-3339 er moderne, utbredt, sunt format som brukes overalt (unntatt i e-post som verken er moderne eller tilregnelig).
Min tidssoneforskyvning er for tiden -08: 00, så den enkleste formen for denne kommandoen skal skrive ut gjeldende tid som div id = «be714d4c7f»>
.
Kommentarer
Svar
Det virker som om du kan gjøre flere formater ved å bruke bryteren til GNU-implementering av date
(versjon 5.90 eller nyere), --rfc3339=
.
Eksempler
$ 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
Hvis du vil at T
skal legges til, som et hack:
$ date --rfc-3339=seconds | sed "s/ /T/" 2014-03-19T18:35:03-04:00
Hvis du vil ha det i millisekunder :
$ date --rfc-3339=ns | sed "s/ /T/; s/\(\....\).*\([+-]\)/\1\2/g" 2014-03-19T18:42:52.362-04:00
Referanser
Kommentarer
- I disse dager er det ikke behov for hack for å få ' T '.
--iso-8601' option accepts the same arguments as
–rfc-3339`, og inkluderer ' T ' utgang. - Sed del
s/\(\....\).*-/\1-/g
skal væres/\(\....\).*\([+-]\)/\1\2/g
for også å jobbe øst for Atlanterhavet. - @svante – takk for detaljer, løst.
- @Eonil som faktisk ikke er riktig, sier RFC3339:
NOTE: ISO 8601 defines date and time separated by "T".
Mens RFC3339 lar deg bruke en plass i stedet. Les ietf.org/rfc/rfc3339.txt Avsnitt 5.6 - @ rwenz3l Min feil. Jeg har bare lest bare ABNF-delen og savnet notatene. Takk for at du påpekte det!
Svar
Med GNU date
(5.90 eller høyere):
$ TZ=America/Anchorage date "+%FT%T.%N%:z" 2014-03-19T14:29:31.041119357-08:00
Erstatt %N
med %3N
for millisekunder, %6N
i mikrosekunder …
AFAIK, ingen av POSIX-, Unix- eller LSB-spesifikasjonene spesifiserer noen kommando som kan vise tider med del-sekunders granularitet, men brøkdelen er valgfri i RFC 3339.
POSIX / Unix / LSB strftime støtter %z
for å vise TZ-forskyvningen som -0800
, så den mest bærbare du sannsynligvis kommer til å få er:
$ 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
Svar
Du kan også formatere tiden i henhold til RFC3339 (ISO8601) enklere:
$ date -u +"%Y-%m-%dT%H:%M:%SZ" 2016-11-08T08:52:55Z
MERK: Dette skjemaet at brukes også i Label Schema Convention RC 1.0
Kommentarer
- At ' ikke er en gyldig RFC3339. Eran ' s svar på « dato +% Y-% m-% dT% T% z er riktig og færre tegn. Hvis du vil i UTC pass -u-flagg, som vil nullstille tidssone-forskyvningen.
- Med
-u
-flagget er dette svaret riktig, ikke sant? - @briceburg hvorfor er dette ikke gyldig RFC3339? I følge tools.ietf.org/html/rfc3339#section-5.6 ser det ut til å være riktig så vidt jeg kan se.
Svar
GNU date
har ISO-8601-format innebygd – er ikke det ganske nær eller identisk med RFC-3339?
1065 % date --iso-8601=seconds 2014-03-19T16:51:16-0600
Kommentarer
- ISO-8601 tillater forskjellige formatting av datoer og klokkeslett, men jeg tror at OP ber spesielt om W3C Date format " Komplett dato pluss timer, minutter, sekunder og en desimalbrøk av et sekund ÅÅÅÅ-MM-DDThh: mm: ss.sTZD (f.eks. 1997-07-16T19: 20: 30.45 + 01: 00) " – W3C dato- og tidsformater .
Svar
Hva med gamle gode:
$ date +%Y-%m-%dT%T%z 2015-10-29T14:47:06+0200
Kommentarer
- Hvor er tidssoneinformasjonen?
- Dette fungerer både på mac og linux ' date '
- Hva med millisekunder?
- rask merknad her, uten å åpne RFC, mangler tidssonesegmentet
0200
et kolon, som kan bryte noen systemer som krever det. - @MikeMackintosh ' s merknad er relevant; utdataene som vises her er ikke en lovlig RFC 3339-dato. Tykktarmen i tidssonesegmentet kreves for RFC 3339; se definisjonen av
time-numoffset
ved tools.ietf.org/html/rfc3339#section-5.6 .
Svar
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"
Disse kommandoene er POSIX-kompatible, med unntak av %z
konverteringsspesifikasjonen. Imidlertid støttes %z
og fungerer på samme måte i Linux, MacOS, FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, Solaris, Minix og Haiku. Det fungerer også med verktøyene i Busybox, Toybox og sbase (suckless.org basesystemverktøy). Siden %z
sender ut tidssoneforskyvningen i ±HHMM
-format, trenger vi sed
-røret for å legge til et kolon og endre det til ±HH:MM
.
MERK: Kommandot Heirloom-prosjektet «s date
har inkompatibel %z
utgang: det skriver ikke ut et +
-tegn.
2013-09-05 14:58:33.102 -0800
bortsett fra når det er Det er en eller annen grunn til at mellomrom ikke må brukes i det hele tatt.