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

date 명령은 이러한 기능을 제공하지 않습니다. RFC-3339가 모든 곳에서 사용되는 현대적이고 널리 퍼진 정상 형식 (현대 적이지도 정상적이지 않은 이메일 제외).

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

댓글

  • 어떤 표준 에 관심이 있습니까? in?
  • 저는 개인적으로 GNU를 사용하는 것이 좋지만 대대적 인 계획에서는 그보다 더 넓어야합니다. 또한 합리적인 기본값 (짧은 옵션, 밀리 초 정밀도)과 함께 제공되어야하며 1 초 미만의 정밀도 (0 또는 9 이외의 자릿수)를 지정합니다.
  • 정상적인 형식이 아님 : 총 공백이 없으면 사람이 읽을 수 없게됩니다. 약간 변형 된 2013-09-05 14:58:33.102 -0800를 사용해야합니다. 공백을 전혀 사용해서는 안되는 몇 가지 이유입니다.
  • 사람과 기계 모두 읽기 어려운 메일 날짜 형식 (RFC 822, 2822)과 비교했습니다.

답변

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 

참조

댓글

  • 요즘에는 ' T '. --iso-8601' option accepts the same arguments as -rfc-3339`이며, ' T '를 포함합니다. 출력.
  • Sed 부분 s/\(\....\).*-/\1-/g는 대서양 동쪽에서도 작동하려면 s/\(\....\).*\([+-]\)/\1\2/g 여야합니다.
  • @svante-세부 사항을 수정 해 주셔서 감사합니다.
  • @Eonil 실제로 정확하지 않지만 RFC3339는 다음과 같이 말합니다. NOTE: ISO 8601 defines date and time separated by "T". RFC3339를 사용하면 대신 공간. ietf.org/rfc/rfc3339.txt 섹션 5.6
  • @ rwenz3l 내 잘못입니다. 방금 ABNF 부분 만 읽고 메모를 놓쳤습니다. 지적 해 주셔서 감사합니다!

답변

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 사양은 다음과 같이 시간을 표시 할 수있는 명령을 지정하지 않습니다. 1 초 미만의 단위이지만 RFC 3339에서는 분수 부분이 선택 사항입니다.

POSIX / Unix / LSB strftime은 TZ 오프셋을 iv id로 표시하기 위해 %z를 지원합니다. = “20a537d531″>

, 가장 휴대 성이 높은 제품은 다음과 같습니다.

 $ 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 

답변

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

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

참고 : 이 양식 at은 라벨 스키마 규칙 RC 1.0

댓글

  • 에서도 사용됩니다. '은 유효한 RFC3339가 아닙니다. “`date + % Y- % m- % dT % T % z“`에 대한 Eran '의 대답은 정확하고 문자 수가 적습니다. UTC 통과 -u 플래그를 사용하면 시간대 오프셋이 0이됩니다.
  • -u 플래그를 사용하면이 대답이 맞습니까?
  • @briceburg 이것이 유효한 RFC3339가 아닌 이유는 무엇입니까? tools.ietf.org/html/rfc3339#section-5.6 에 따르면 제가 알 수있는 한 정확한 것 같습니다.

Answer

GNU date에는 ISO-8601 형식이 내장되어 있습니다. RFC-3339에 매우 가깝거나 심지어 동일합니까?

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

댓글

  • ISO-8601은 날짜와 시간의 형식을 지정하지만 OP는 W3C Date 형식 " 완전한 날짜와 시간, 분, 초 및 초의 소수 YYYY-MM-DDThh : mm : ss.sTZD (예 : 1997-07-16T19 : 20 : 30.45 + 01 : 00) " W3C 날짜 및 시간 형식 .

답변

좋아요 :

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

댓글

  • 시간대 정보는 어디에 있습니까?
  • Mac과 Linux 모두에서 작동합니다. ' 날짜 '
  • 밀리 초는 어떻습니까?
  • 여기에서 빠른 메모입니다. RFC를 열지 않고 시간대 세그먼트 0200에 콜론이 누락되어 콜론이 필요한 일부 시스템이 손상 될 수 있습니다.
  • @MikeMackintosh '의 메모는 적절합니다. 여기에 표시된 출력은 법적 RFC 3339 날짜가 아닙니다 . 시간대 세그먼트의 콜론은 RFC 3339에 필요합니다. tools.ietf.org/html/rfc3339#section-5.6 에서 time-numoffset의 정의를 참조하세요.

답변

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" 

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

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

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다