date
-komento ei tarjoa sellaista, mikä on surullista, koska RFC-3339 on moderni, laajalle levinnyt, järkevä muoto, jota käytetään kaikkialla (paitsi sähköpostissa, joka ei ole nykyaikainen eikä järkevä).
Aikavyöhykkeen siirtymäni on tällä hetkellä -08: 00, joten tämän komennon yksinkertaisen muodon pitäisi tulostaa nykyinen aika muodossa div id = ”be714d4c7f”>
.
Kommentit
Vastaus
Vaikuttaa siltä, että voit tehdä useita muotoja siirtymällä date
(versio 5.90 tai uudempi), --rfc3339=
.
Esimerkkejä
$ 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
Jos haluat, että T
lisätään hakata, hakkerina:
$ date --rfc-3339=seconds | sed "s/ /T/" 2014-03-19T18:35:03-04:00
Jos haluat sen millisekunteina :
$ date --rfc-3339=ns | sed "s/ /T/; s/\(\....\).*\([+-]\)/\1\2/g" 2014-03-19T18:42:52.362-04:00
Viitteet
kommentit
- Nykyään ei tarvitse hakata, jotta ’ T ’.
--iso-8601' option accepts the same arguments as
–rfc-3339` ja sisältää ’ T ’ ulostulo. - Sed-osan
s/\(\....\).*-/\1-/g
tulisi ollas/\(\....\).*\([+-]\)/\1\2/g
, jotta se toimisi myös Atlantin itäpuolella. - @svante – kiitos yksityiskohdista, korjattu.
- @Eonil, joka ei oikeastaan ole oikein, RFC3339: ssä sanotaan:
NOTE: ISO 8601 defines date and time separated by "T".
Vaikka RFC3339: n avulla voit käyttää sen sijaan tilaa. Lue ietf.org/rfc/rfc3339.txt osio 5.6 - @ rwenz3l Minun vikani. Luin vain ABNF-osan ja kaipasin muistiinpanoja. Kiitos, että osoitit sen!
Vastaa
GNU: lla date
(5.90 tai uudempi):
$ TZ=America/Anchorage date "+%FT%T.%N%:z" 2014-03-19T14:29:31.041119357-08:00
Korvaa %N
sanoilla %3N
millisekunnin ajan, %6N
mikrosekunnin ajan …
AFAIK, mikään POSIX-, Unix- tai LSB-määrityksistä ei määritä komentoa, joka voi näyttää ajat alisekunnin tarkkuus, mutta murto-osa on valinnainen RFC 3339: ssä.
POSIX / Unix / LSB-strftime tukee %z
TZ-siirtymän näyttämiseksi muodossa -0800
, joten kaikkein kannettavin, jonka todennäköisesti saat:
$ 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
Vastaa
Voit myös muotoilla ajan RFC3339 (ISO8601) -asetuksen mukaan helpommin:
$ date -u +"%Y-%m-%dT%H:%M:%SZ" 2016-11-08T08:52:55Z
HUOMAUTUS: Tämä lomake at käytetään myös Label Schema Convention RC 1.0
-kommenteissa
- Tämä ’ ei ole kelvollinen RFC3339. Eran ’ vastaus päivämäärä +% Y-% m-% dT% T% z on oikea ja vähemmän merkkejä. Jos haluat UTC-pass -u-lipun, joka nollaa aikavyöhykkeen siirtymän.
-
-u
-merkinnällä tämä vastaus on oikea, eikö? - @briceburg miksi tämä ei ole kelvollinen RFC3339? tools.ietf.org/html/rfc3339#section-5.6 mukaan se näyttää olevan oikea niin pitkälle kuin voin kertoa.
Vastaa
GNU date
on sisäänrakennettu ISO-8601-muoto – ei ”t melko lähellä tai jopa identtinen RFC-3339: n kanssa?
1065 % date --iso-8601=seconds 2014-03-19T16:51:16-0600
Kommentit
- ISO-8601 sallii eri päivämäärien ja aikojen muotoilut, mutta mielestäni OP pyytää nimenomaisesti W3C Date -muotoa ” Täydellinen päivämäärä plus tunnit, minuutit, sekunnit ja a sekunnin desimaaliosa VVVV-KK-PPNThh: mm: ss.sTZD (esim. 1997-07-16T19: 20: 30.45 + 01: 00) ” – W3C päivämäärä- ja aikamuodot .
vastaus
Entä vanha:
$ date +%Y-%m-%dT%T%z 2015-10-29T14:47:06+0200
Kommentit
- Missä aikavyöhyketiedot ovat?
- Tämä toimii sekä Mac- että Linux-käyttöjärjestelmissä ’ date ’
- Entä millisekunnit?
- pikahuomautus tässä avaamatta RFC: tä, aikavyöhykesegmentistä
0200
puuttuu kaksoispiste, mikä saattaa rikkoa joitain sitä vaativia järjestelmiä. - @MikeMackintosh ’ huomautus on osuva; tässä esitetty tulos ei ole laillinen RFC 3339 -päivämäärä. Aikavyöhykesegmentin kaksoispiste vaaditaan RFC 3339: lle; katso
time-numoffset
-kohdan määritelmä osoitteesta tools.ietf.org/html/rfc3339#section-5.6 .
Vastaa
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"
Nämä komennot ovat POSIX-yhteensopivia, lukuun ottamatta %z
-muunnosmäärityksen. %z
on kuitenkin laajalti tuettu ja toimii samalla tavalla Linuxissa, MacOS: ssa, FreeBSD: ssä, OpenBSD: ssä, NetBSD: ssä, DragonFlyBSD: ssä, Solarisissa, Minixissä ja Haikussa. Se toimii myös Busyboxin, Toyboxin ja sbasen (suckless.org-perusjärjestelmän apuohjelmien) työkalujen kanssa. Koska %z
antaa aikavyöhykesiirron ±HHMM
-muodossa, meidän on lisättävä sed
-putki kaksoispiste ja vaihda se muotoon ±HH:MM
.
HUOMAUTUS: Heirloom-projektin ”s date
-komennossa ei ole yhteensopivaa %z
-lähtö: se ei tulosta +
-merkkiä.
2013-09-05 14:58:33.102 -0800
paitsi silloin, kun s jostain syystä, miksi välilyöntejä ei saa käyttää lainkaan.