[unix] RFC-3339 형식으로 날짜를 인쇄하기위한 표준 명령은 무엇입니까?

date명령은 RFC-3339는 (도 현대도 제정신 이메일 제외) 모든 곳에서 사용되는 현대, 광범위하게, 제정신 형식이기 때문에 일종의 슬픈입니다 같은 일을, 제공하지 않습니다.

시간대 오프셋은 현재 -08 : 00이므로이 명령의 가장 간단한 형식은 현재 시간을로 인쇄해야합니다 2013-09-05T14:58:33.102-08:00.



답변

GNU 구현 date(버전 5.90 이상)으로 전환하여 여러 형식을 수행 할 수있는 것처럼 보입니다 --rfc3339=.

$ 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

T해킹으로 추가 하려면 다음 을 수행하십시오.

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

밀리 초 단위로 원하는 경우 :

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

참고 문헌


답변

GNU date(5.90 이상) :

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

교체 %N%3N, 밀리 초 %6N마이크로 초 …

AFAIK, POSIX, Unix 또는 LSB 사양 중 어느 것도 초 미만의 단위로 시간을 표시 할 수있는 명령을 지정하지 않지만 RFC 3339에서는 소수 부분이 선택 사항입니다.

POSIX / Unix / LSB strftime은 %zTZ 오프셋을로 표시하도록 지원 -0800하므로 가장 이식성이 좋은 것은 다음과 같습니다.

 $ 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


답변

GNU date에는 ISO-8601 형식이 내장되어 있습니다. RFC-3339와 매우 유사하거나 동일하지 않습니까?

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


답변

좋은 나이는 어떻습니까?

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


답변

RFC3339 (ISO8601) 에 따라 시간을 더 쉽게 형식화 할 수도 있습니다 .

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

참고 : 이 형식은 Label Schema Convention RC 1.0 에서도 사용됩니다.


답변

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'

이러한 명령은 %z변환 사양을 제외하고 POSIX와 호환됩니다 . 그러나 %zLinux, MacOS, FreeBSD, OpenBSD, NetBSD, DragonFlyBSD, Solaris, Minix 및 Haiku에서 널리 지원되며 동일한 방식으로 작동합니다. 또한 Busybox, Toybox 및 sbase (suckless.org 기본 시스템 유틸리티)의 도구와 함께 작동합니다. %z시간대 오프셋 ±HHMM형식으로 출력 하므로 sed콜론을 추가하고로 변경 하려면 파이프 가 필요합니다 ±HH:MM.

참고 : Heirloom 프로젝트의 date명령에는 호환되지 않는 %z출력이 있습니다. +부호를 인쇄하지 않습니다 .


답변