Mi a szokásos parancs egy dátum RFC-3339 formátumú nyomtatásához?

A date parancs nem kínál ilyet, ami nagyon szomorú, mivel az RFC-3339 az modern, széles körben elterjedt, józan formátum, amelyet mindenhol használnak (kivéve az e-mailben, amely sem nem modern, sem épelméjű).

Az időzóna-eltolásom jelenleg -08: 00, ezért a parancs legegyszerűbb formája az aktuális időt 2013-09-05T14:58:33.102-08:00.

Megjegyzések

  • Melyik szabvány t érdekli személyesen?
  • Én személy szerint jól vagyok a GNU-val, de a dolgok nagy sémájában ennek tágabbnak kell lennie. Ésszerű alapértelmezettel (rövid opció, milliszekundumos pontossággal) kell rendelkeznie, és módja van arra, hogy adja meg a másodlagos pontosságot (a 0-tól és 9-től eltérő számjegyek száma).
  • Ez ‘ s nem ésszerű formátum: az összes a szóköz hiánya szükségtelenül megnehezíti az emberek számára az olvasást. Használja az enyhe variációt 2013-09-05 14:58:33.102 -0800, kivéve, ha s valamilyen ok, amiért egyáltalán nem szabad szóközt használni.
  • Összehasonlítottam a mail date formátummal (RFC 822, 2822), amelyet mind az emberek, mind a gépek nehezen olvashatnak.

Válasz

Úgy tűnik, hogy többféle formátumot is megtehet a date (5.90-es vagy újabb verzió), --rfc3339=.

Példák

$ 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 

Ha azt akarja, hogy a T fájlt hozzáadják, feltörésként:

$ date --rfc-3339=seconds | sed "s/ /T/" 2014-03-19T18:35:03-04:00 

Ha ezredmásodpercekben szeretné megadni :

$ date --rfc-3339=ns | sed "s/ /T/; s/\(\....\).*\([+-]\)/\1\2/g" 2014-03-19T18:42:52.362-04:00 

Hivatkozások

Megjegyzések

  • Manapság nincs szükség feltörésre a ‘ T ‘. A --iso-8601' option accepts the same arguments as –rfc-3339`, és tartalmazza a ‘ T ‘ kimenet.
  • A s/\(\....\).*-/\1-/g rész s/\(\....\).*\([+-]\)/\1\2/g legyen, hogy az Atlanti-óceántól keletre is működjön.
  • @svante – köszönöm a részleteket, javítva.
  • @Eonil, ami valójában nem helyes, az RFC3339 kijelenti: NOTE: ISO 8601 defines date and time separated by "T". Míg az RFC3339 lehetővé teszi egy hely helyett. Olvassa el az ietf.org/rfc/rfc3339.txt 5.6 szakasz
  • @ rwenz3l Az én hibám. Csak az ABNF részét olvastam, és hiányoztak a jegyzetek. Köszönjük, hogy rámutattál!

Válasz

GNU-val date (5.90 vagy újabb):

$ TZ=America/Anchorage date "+%FT%T.%N%:z" 2014-03-19T14:29:31.041119357-08:00 

Cserélje le az %N szót a %3N ezredmásodpercekig, %6N mikro-másodpercig …

AFAIK, a POSIX, a Unix vagy az LSB egyik specifikációja sem határoz meg olyan parancsot, amely az a másodlagos részletesség, de a töredékrész opcionális az RFC 3339-ben.

A POSIX / Unix / LSB strftime támogatja a %z -t, hogy a TZ eltolást -0800, tehát a leginkább hordozható, amelyet valószínűleg kapni fog:

 $ 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 

Válasz

Az időt az RFC3339 (ISO8601) szerint is könnyebben formázhatja:

 $ date -u +"%Y-%m-%dT%H:%M:%SZ" 2016-11-08T08:52:55Z  

MEGJEGYZÉS: Ez az űrlap az at a Label Schema Convention RC 1.0

megjegyzések

  • fájlban is használatos Ez ‘ nem érvényes RFC3339. Eran ‘ “dátum +% Y-% m-% dT% T% z” válasza helyes és kevesebb karaktert tartalmaz. Ha az UTC pass -u jelölőnégyzetet szeretné megadni, akkor ez nullázza az időzóna eltolását.
  • A -u jelölővel ez a válasz helyes, igaz?
  • @briceburg miért nem érvényes ez az RFC3339? A tools.ietf.org/html/rfc3339#section-5.6 szerint úgy tűnik, hogy helyes, amennyire meg tudom mondani.

Válasz

A GNU date beépített ISO-8601 formátummal rendelkezik – nem meglehetősen közeli, vagy akár azonos az RFC-3339-hez?

1065 % date --iso-8601=seconds 2014-03-19T16:51:16-0600 

Megjegyzések

  • Az ISO-8601 különböző a dátumok és időpontok formázása, de úgy gondolom, hogy az OP kifejezetten a W3C Dátum formátumot kéri ” Teljes dátum plusz óra, perc, másodperc és egy másodperc tizedes tört ÉÉÉÉ-HH-NNTóó: pp: ss.sTZD (pl. 1997-07-16T19: 20: 30.45 + 01: 00) ” W3C dátum- és időformátum .

Válasz

Mit szólnál a jó öreghez:

$ date +%Y-%m-%dT%T%z 2015-10-29T14:47:06+0200 

Megjegyzések

  • Hol vannak az időzónára vonatkozó információk?
  • Ez Mac és Linux rendszereken egyaránt működik ‘ date ‘
  • Mit szólnál ezredmásodpercekhez?
  • rövid megjegyzés itt, az RFC megnyitása nélkül, az időzóna szegmensből 0200 hiányzik egy kettőspont, ami megszakíthat néhány, ehhez szükséges rendszert.
  • @MikeMackintosh ‘ jegyzet releváns; az itt bemutatott kimenet nem törvényes RFC 3339 dátum. Az időzóna szegmensben a kettőspont szükséges az RFC 3339-hez; lásd a time-numoffset definíciót itt: tools.ietf.org/html/rfc3339#section-5.6 .

Válasz

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" 

Ezek a parancsok POSIX-kompatibilisek, kivéve a %z konverziós specifikáció. A %z azonban széles körben támogatott, és ugyanúgy működik Linux, MacOS, FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, Solaris, Minix és Haiku esetén. Működik a Busybox, a Toybox és az sbase (a suckless.org alaprendszer segédprogramjai) eszközeivel is. Mivel %z az időzóna-eltolást ±HHMM formátumban adja ki, a sed cső hozzáadására van szükség kettőspontot, és állítsa át ±HH:MM -re.

MEGJEGYZÉS: A “s date Heirloom projekt inkompatibilis %z kimenet: nem nyomtat + jelet.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük