date
-kommandoen tilbyder ikke sådan noget, hvilket er lidt trist, da RFC-3339 er moderne, udbredt, fornuftigt format, der bruges overalt (undtagen i e-mail, som hverken er moderne eller sund).
Min tidszone-forskydning er i øjeblikket -08: 00, så den enkleste form for denne kommando skal udskrive det aktuelle tidspunkt som div id = “be714d4c7f”>
.
Kommentarer
Svar
Det ser ud til, at du kan gøre flere formater ved hjælp af omskifteren til GNU-implementering af date
(version 5.90 eller derover), --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 ønsker, at T
skal tilføjes, som et hack:
$ date --rfc-3339=seconds | sed "s/ /T/" 2014-03-19T18:35:03-04:00
Hvis du vil have det i millisekunder :
$ date --rfc-3339=ns | sed "s/ /T/; s/\(\....\).*\([+-]\)/\1\2/g" 2014-03-19T18:42:52.362-04:00
Referencer
Kommentarer
- I disse dage er der ikke behov for hack for at få ' T '.
--iso-8601' option accepts the same arguments as
–rfc-3339` og inkluderer ' T ' output. - Sed del
s/\(\....\).*-/\1-/g
skal væres/\(\....\).*\([+-]\)/\1\2/g
for også at arbejde øst for Atlanterhavet. - @svante – tak for detaljerne, rettet.
- @Eonil der faktisk ikke er korrekt, siger RFC3339:
NOTE: ISO 8601 defines date and time separated by "T".
Mens RFC3339 giver dig mulighed for at bruge en plads i stedet. Læs ietf.org/rfc/rfc3339.txt Afsnit 5.6 - @ rwenz3l Min fejl. Jeg læste bare kun ABNF-delen og savnede noterne. Tak for at påpege det!
Svar
Med GNU date
(5.90 eller derover):
$ TZ=America/Anchorage date "+%FT%T.%N%:z" 2014-03-19T14:29:31.041119357-08:00
Erstat %N
med %3N
i millisekunder, %6N
i mikrosekunder …
AFAIK, ingen af POSIX-, Unix- eller LSB-specifikationerne angiver nogen kommando, der kan vise tid med sub-sekunders granularitet, men brøkdelen er valgfri i RFC 3339.
POSIX / Unix / LSB strftime understøtter %z
for at vise TZ-offset som -0800
, så den mest bærbare, du sandsynligvis vil 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) lettere:
$ date -u +"%Y-%m-%dT%H:%M:%SZ" 2016-11-08T08:52:55Z
BEMÆRK: Denne formular at bruges 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 korrekt og færre tegn. Hvis du vil i UTC-pass -u-flag, hvilket vil nulstille tidszoneforskydningen.
- Med
-u
-flagget er dette svar korrekt, ikke? - @briceburg hvorfor er dette ikke gyldigt RFC3339? I henhold til tools.ietf.org/html/rfc3339#section-5.6 synes det at være korrekt, så vidt jeg kan se.
Svar
GNU date
har ISO-8601-format indbygget – er ikke det ret tæt på eller endog identisk med RFC-3339?
1065 % date --iso-8601=seconds 2014-03-19T16:51:16-0600
Kommentarer
- ISO-8601 tillader forskellige formattering af datoer og klokkeslæt, men jeg tror, at OP beder specifikt om W3C dato format " Komplet dato plus timer, minutter, sekunder og en decimalfraktion af et sekund ÅÅÅÅ-MM-DDThh: mm: ss.sTZD (f.eks. 1997-07-16T19: 20: 30.45 + 01: 00) " – W3C dato- og tidsformater .
Svar
Hvad med gamle gode:
$ date +%Y-%m-%dT%T%z 2015-10-29T14:47:06+0200
Kommentarer
- Hvor er tidszoneoplysningerne?
- Dette fungerer både på mac og linux ' date '
- Hvad med millisekunder?
- hurtig bemærkning her, uden at åbne RFC, tidszonesegmentet mangler
0200
et kolon, som muligvis bryder nogle systemer, der kræver det. - @MikeMackintosh ' s note er relevant; output vist her er ikke en lovlig RFC 3339-dato. Tyktarmen i tidszonsegmentet kræves til RFC 3339; se definitionen af
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 kommandoer er POSIX-kompatible, med undtagelse i %z
konverteringsspecifikationen. %z
understøttes dog bredt og fungerer på samme måde i Linux, MacOS, FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, Solaris, Minix og Haiku. Det fungerer også med værktøjerne i Busybox, Toybox og sbase (basesystemværktøjerne suckless.org). Da %z
udsender tidszoneforskydningen i ±HHMM
-format, har vi brug for sed
-røret for at tilføje et kolon og skift det til ±HH:MM
.
BEMÆRK: Kommandot Heirloom-projektet “s date
er inkompatibelt %z
output: det udskriver ikke et +
tegn.
2013-09-05 14:58:33.102 -0800
undtagen når der er s en eller anden grund til, at mellemrum slet ikke må bruges.