Polecenie date nie oferuje czegoś takiego, co jest trochę smutne, ponieważ RFC-3339 jest nowoczesny, powszechny, rozsądny format używany wszędzie (z wyjątkiem e-maili, które nie są ani nowoczesne, ani rozsądne). 
 Moje przesunięcie strefy czasowej wynosi obecnie -08:00, więc najprostsza forma tego polecenia powinna wypisać bieżący czas jako 2013-09-05T14:58:33.102-08:00. 
Komentarze
Odpowiedź
 Wygląda na to, że możesz zrobić kilka formatów, używając przełącznika na implementację GNU date (wersja 5.90 lub nowsza), --rfc3339=. 
Przykłady
$ 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 
 Jeśli chcesz dodać T jako sztuczkę: 
$ date --rfc-3339=seconds | sed "s/ /T/" 2014-03-19T18:35:03-04:00 
Jeśli chcesz to w milisekundach :
$ date --rfc-3339=ns | sed "s/ /T/; s/\(\....\).*\([+-]\)/\1\2/g" 2014-03-19T18:42:52.362-04:00 
Referencje
Komentarze
-  Obecnie nie jest potrzebny żaden hack, aby uzyskać ' T '. Element 
--iso-8601' option accepts the same arguments as–rfc-3339` i zawiera ' T ' w swoim -  Część Sed 
s/\(\....\).*-/\1-/gpowinna byćs/\(\....\).*\([+-]\)/\1\2/g, aby działała również na wschód od Atlantyku. - @svante – dzięki za szczegóły, naprawione.
 -  @Eonil, który w rzeczywistości nie jest poprawny, RFC3339 stwierdza: 
NOTE: ISO 8601 defines date and time separated by "T".Podczas gdy RFC3339 pozwala na użycie zamiast tego przestrzeń. Przeczytaj ietf.org/rfc/rfc3339.txt Sekcja 5.6 - @ rwenz3l Moja wina. Po prostu przeczytałem tylko część ABNF i przegapiłem notatki. Dziękujemy za zwrócenie uwagi!
 
Odpowiedz
 Z GNU date (5.90 lub nowszy): 
$ TZ=America/Anchorage date "+%FT%T.%N%:z" 2014-03-19T14:29:31.041119357-08:00 
 Zamień %N na %3N dla milisekund, %6N dla mikro-sekund … 
AFAIK, żadna ze specyfikacji POSIX, Unix lub LSB nie określa żadnego polecenia, które może wyświetlać czasy z ziarnistość podsekundowa, ale część ułamkowa jest opcjonalna w RFC 3339.
 POSIX / Unix / LSB strftime obsługuje %z, aby wyświetlić przesunięcie TZ jako -0800, więc najbardziej przenośny, jaki prawdopodobnie dostaniesz, to: 
 $ 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 
Odpowiedź
Możesz także sformatować czas zgodnie z RFC3339 (ISO8601) :
 $ date -u +"%Y-%m-%dT%H:%M:%SZ" 2016-11-08T08:52:55Z  
UWAGA: Ten formularz at jest również używany w Konwencji schematu etykiet RC 1.0
Komentarze
- To ' nie jest prawidłowym RFC3339. Eran ' s odpowiedź „ „ date +% Y-% m-% dT% T% z jest poprawna i zawiera mniej znaków. Jeśli chcesz w UTC flagę pass -u, która wyzeruje przesunięcie strefy czasowej.
 -  Z flagą 
-uodpowiedź jest poprawna, prawda? - @briceburg dlaczego to nie jest poprawne RFC3339? Według tools.ietf.org/html/rfc3339#section-5.6 wydaje się być poprawne, o ile wiem.
 
Odpowiedź
 GNU date ma wbudowany format ISO-8601 – czy nie całkiem zbliżone lub nawet identyczne z RFC-3339? 
1065 % date --iso-8601=seconds 2014-03-19T16:51:16-0600 
Komentarze
- ISO-8601 dopuszcza różne formatowanie dat i godzin, ale wydaje mi się, że OP pyta konkretnie o format Daty W3C " Pełna data plus godziny, minuty, sekundy i ułamek dziesiętny sekundy RRRR-MM-DDTgg: mm: ss.sTZD (np. 1997-07-16T19: 20: 30.45 + 01: 00) " – Formaty daty i godziny W3C .
 
Odpowiedź
A co powiesz na stare dobre:
$ date +%Y-%m-%dT%T%z 2015-10-29T14:47:06+0200 
Komentarze
- Gdzie są informacje o strefie czasowej?
 - Działa to zarówno na Macu, jak i Linuksie ' date '
 - A co z milisekundami?
 -  krótka uwaga, bez otwierania RFC, segmentu strefy czasowej, w 
0200brakuje dwukropka, co może spowodować uszkodzenie niektórych systemów, które tego wymagają. -  @MikeMackintosh ' s notatka jest trafna; pokazane tutaj dane wyjściowe  nie  są zgodne z RFC 3339. Dwukropek w segmencie strefy czasowej jest wymagany dla RFC 3339; zobacz definicję 
time-numoffsetw tools.ietf.org/html/rfc3339#section-5.6 . 
Odpowiedź
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" 
 Te polecenia są zgodne z POSIX, z wyjątkiem specyfikacji konwersji %z. Jednak %z jest szeroko obsługiwany i działa w ten sam sposób w systemach Linux, MacOS, FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, Solaris, Minix i Haiku. Działa również z narzędziami w Busybox, Toybox i sbase (podstawowe narzędzia systemowe suckless.org). Ponieważ %z wyświetla przesunięcie strefy czasowej w formacie ±HHMM, potrzebujemy potoku sed do dodania dwukropek i zmień go na ±HH:MM. 
 UWAGA: Polecenie projektu Heirloom „s date ma niezgodne %z wyjście: nie wypisuje znaku +. 
2013-09-05 14:58:33.102 -0800z wyjątkiem sytuacji, gdy jest jakiś powód, dla którego spacje nie mogą być w ogóle używane.