Kommandot date
erbjuder inte sådant, vilket är lite tråkigt eftersom RFC-3339 är modernt, utbrett, förnuftigt format som används överallt (utom i e-post som varken är modernt eller förnuftigt).
Min tidszonsförskjutning är för närvarande -08: 00 så den enklaste formen av detta kommando bör skriva ut aktuell tid som 2013-09-05T14:58:33.102-08:00
.
Kommentarer
Svar
Det verkar som om du kan göra flera format med växeln till GNU-implementeringen av date
(version 5.90 eller senare), --rfc3339=
.
Exempel
$ 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
Om du vill att T
ska läggas till, som ett hack:
$ date --rfc-3339=seconds | sed "s/ /T/" 2014-03-19T18:35:03-04:00
Om du vill ha det på millisekunder :
$ date --rfc-3339=ns | sed "s/ /T/; s/\(\....\).*\([+-]\)/\1\2/g" 2014-03-19T18:42:52.362-04:00
Referenser
Kommentarer
- Dessa dagar behövs inget hack för att få ' T '.
--iso-8601' option accepts the same arguments as
–rfc-3339` och innehåller ' T ' output. - Sed del
s/\(\....\).*-/\1-/g
bör varas/\(\....\).*\([+-]\)/\1\2/g
för att också arbeta öster om Atlanten. - @svante – tack för detaljerna, fixade.
- @Eonil som faktiskt inte är korrekt säger RFC3339:
NOTE: ISO 8601 defines date and time separated by "T".
Medan RFC3339 låter dig använda en utrymme istället. Läs ietf.org/rfc/rfc3339.txt Avsnitt 5.6 - @ rwenz3l Mitt fel. Jag läste bara ABNF-delen och saknade anteckningarna. Tack för att ni påpekade det!
Svar
Med GNU date
(5.90 eller högre):
$ TZ=America/Anchorage date "+%FT%T.%N%:z" 2014-03-19T14:29:31.041119357-08:00
Ersätt %N
med %3N
för millisekunder, %6N
i mikrosekunder …
AFAIK, ingen av POSIX-, Unix- eller LSB-specifikationerna anger något kommando som kan visa gånger med sub-sekunders granularitet, men bråkdelen är valfri i RFC 3339.
POSIX / Unix / LSB strftime stöder %z
för att visa TZ-offset som -0800
, så den mest bärbara du förmodligen kommer att få är:
$ 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 också formatera tiden enligt RFC3339 (ISO8601) enklare:
$ date -u +"%Y-%m-%dT%H:%M:%SZ" 2016-11-08T08:52:55Z
OBS: Det här formuläret at används också i Label Schema Convention RC 1.0
Kommentarer
- Att ' inte är en giltig RFC3339. Eran ' s svar på ” datum +% Y-% m-% dT% T% z är korrekt och färre tecken. Om du vill ha UTC-pass -u-flaggan, vilket kommer att nollställa tidszonsförskjutningen.
- Med
-u
-flaggan är svaret korrekt, eller hur? - @briceburg varför är detta inte giltigt RFC3339? Enligt tools.ietf.org/html/rfc3339#section-5.6 verkar det vara så vitt jag kan säga.
Svar
GNU date
har ISO-8601-format inbyggt – är inte det ganska nära eller till och med identiskt med RFC-3339?
1065 % date --iso-8601=seconds 2014-03-19T16:51:16-0600
Kommentarer
- ISO-8601 tillåter olika formatting av datum och tider, men jag tror att OP frågar specifikt för W3C Date format " Komplett datum plus timmar, minuter, sekunder och en decimalfraktion av en sekund ÅÅÅÅ-MM-DDThh: mm: ss.sTZD (t.ex. 1997-07-16T19: 20: 30.45 + 01: 00) " – W3C datum- och tidsformat .
Svar
Vad sägs om gamla gamla:
$ date +%Y-%m-%dT%T%z 2015-10-29T14:47:06+0200
Kommentarer
- Var är tidszoninformationen?
- Detta fungerar både på mac och linux ' date '
- Vad sägs om millisekunder?
- snabb anteckning här, utan att öppna RFC, tidszonsegmentet,
0200
saknas ett kolon, vilket kan bryta vissa system som kräver det. - @MikeMackintosh ' s anteckning är relevant; produktionen som visas här är inte ett lagligt RFC 3339-datum. Kolon i tidszonsegmentet krävs för RFC 3339; se definitionen av
time-numoffset
vid 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"
Dessa kommandon är POSIX-kompatibla, med undantag i konverteringsspecifikationen %z
. %z
stöds dock allmänt och fungerar på samma sätt i Linux, MacOS, FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, Solaris, Minix och Haiku. Det fungerar också med verktygen i Busybox, Toybox och sbase (suckless.org bas systemverktyg). Eftersom %z
matar ut tidszonsförskjutningen i ±HHMM
-format behöver vi sed
-röret för att lägga till en kolon och ändra den till ±HH:MM
.
OBS: kommandot Heirloom-projektet ”s date
är inkompatibelt %z
-utgång: det skriver inte ut ett +
-tecken.
2013-09-05 14:58:33.102 -0800
utom när det finns Det är en anledning till varför utrymmen inte får användas alls.