OS X의`date` 명령에는 ISO 8601`-I` 옵션이 없습니까?


194

Bash 스크립트에서 현재 날짜 시간을 ISO 8601 형식 (바람직하게는 UTC)으로 인쇄하고 싶습니다. 이것은 다음과 같이 간단해야합니다 date -I.

http://ss64.com/bash/date.html

그러나 이것은 내 Mac에서 작동하지 않는 것 같습니다.

$ date -I
date: illegal option -- I
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... 
            [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

실제로이 man date옵션을 나열하지 않습니다.

왜 이것이 ISO 8601 형식으로 날짜를 인쇄하는지 또는 다른 (쉬운) 방법인지 알고 있습니까? 감사!


2
명확히하기 위해 시간을 포함하여 UTC 시간대로 전체 ISO 8601 날짜를 원합니다.
Aseem Kishore

질문을 편집하는 것이 좋습니다. 어떤 형식으로 시간을 원하십니까?
Tom Zych

@Tom : 편집했습니다. 형식별로 ISO 8601이 구체적이지 않습니까?
Aseem Kishore

아니요, ISO 8601은 구체적이지 않습니다. 이 표준은 다양한 정밀도의 여러 형식을 지정합니다. 모두 2011-08-272011-08-27T18:55:43ZISO 8601 형식입니다. 실제로 질문을 편집하면 여러 의견에 걸쳐 업데이트하는 것이 더 유용합니다. 인쇄하려는 내용의 예가 이상적입니다.
Keith Thompson

6
접두사 'g'를 사용 하여 GNU coreutils 를 설치 하면 다른 GNU 플래그와 함께 작동했습니다. brewgdate -I
Joel Purra

답변:


348

당신은 사용할 수 있습니다

date "+%Y-%m-%d"

또는 완전한 ISO-8601 호환 날짜 의 경우 다음 형식 중 하나를 사용하십시오.

date -u +"%Y-%m-%dT%H:%M:%SZ"

산출:

2011-08-27T23:22:37Z

또는

date +%Y-%m-%dT%H:%M:%S%z

산출:

2011-08-27T15:22:37-0800

7
기술적으로 "T"는 권장되지만 ISO 8601에서는 선택 사항입니다. 'T'대신 공백을 사용하면 date -u + "% Y- % m- % d % H- % M- % SZ"
Basil Bourque

드디어! 나는 이것을 내 bash_alias에 추가했다
Christian Bongiorno

네, 굉장한 답변 감사합니다! 그러나 이것은 date -u +"%Y-%m-%dT%H:%MZ"정확히 내가 찾고있었습니다.
ChikuMiku

3
@mbigras : Z그리고 +00:00(주로) 동일합니다. 시간 변환을 위해 둘 다 UTC를 의미합니다. 그러나 영국은 +00:00겨울과 +01:00여름 (BST)에 있습니다.
Jeffrey Hulten

5
@JeffreyHulten : "둘 다 UTC를 의미합니다"– Nitpick이지만 ZUTC 이지만 +00:00GMT입니다. UTC는 시간대가 아니며 오프셋이 없습니다. 오프셋은 표준 시간대와 표준시 (UTC) 사이의 시차로 정의됩니다. GMT는 UTC에서 +00 : 00 제거되며 BST는 UTC에서 +01 : 00 제거됩니다.
Amadan

57

GNU의 날짜 date -I와 동일 date +%F하고, -Iseconds그리고 -IminutesUTC 오프셋과도 시간을 포함한다.

$ date +%F # -I or +%Y-%m-%d
2013-05-03
$ date +%FT%T%z # -Iseconds or +%Y-%m-%dT%H:%M:%S%z
2013-05-03T15:59:24+0300
$ date +%FT%H:%M # -Iminutes or +%Y-%m-%dT%H:%M%z
2013-05-03T15:59+0300

-u같다 TZ=UTC. +00:00로 교체 할 수 있습니다 Z.

$ date -u +%FT%TZ
2013-05-03T12:59:24Z

유효한 ISO 8601 날짜 또는 시간 형식이기도합니다.

20130503T15 (%Y%m%dT%M)
2013-05 (%Y%m)
2013-W18 (%Y-W%V)
2013-W18-5 (%Y-W%V-%u)
2013W185 (%YW%V%u)
2013-123 (%Y-%j, ordinal date)
2013 (%Y)
1559 (%H%M)
15 (%H)
15:59:24+03 (UTC offset doesn't have to include minutes)

이것들은 아닙니다 :

2013-05-03 15:59 (T is required in the extended format)
201305 (it could be confused with the YYMMDD format)
20130503T15:59 (basic and exteded formats can't be mixed)

3
+ "% FT % T % z"에 대한
hooray

22

GNU와 BSD 날짜 모두에서 작동하는 간단한 대안은 다음과 같습니다.

date -u +%FT%T%z

7
또는 date -u +%FT%TZUTC에서 오프셋이 0이되기 때문에
akostadinov

15

coreutils 패키지는 GNU 버전의 도구를 제공합니다. 설치하기 위해서:

$ brew install coreutils

제공되는 내용을 볼 수 있습니다.

$ brew list coreutils

날짜와 함께 제공됩니다.

$ brew list coreutils | grep date

이것은 표준 GNU 날짜 명령이므로 -I 스위치를 사용합니다.

$ gdate -I
2016-08-09

1
또는 : gdate --iso-8601=ns: 2016-09-29T16 : 54 : 23,485230000 + 02 : 00
올리비에

5

일반적인 date형식 지정 옵션을 사용하십시오.

date '+%Y-%m-%d'

편집 : 시간과 UTC를 포함하려면 다음과 같습니다.

date -u -Iseconds

date -u '+%Y-%m-%dT%k:%M:%S%z'

시간을 포함하여 전체 날짜를 원하며 UTC 시간대를 원한다는 내용을 OP에 추가했습니다. 그래도 팁 주셔서 감사합니다!
Aseem Kishore

3

Bash의 기능이 아니며 date바이너리 의 기능입니다 . Linux에서는 일반적으로 GNU coreutils 버전이 date있지만 OSX에는 BSD 레거시 유틸리티가 있습니다. GNU 버전은 반드시 옵션 패키지로 설치하거나 직접 교체 할 수 있습니다. 예를 들어 Perl과 같이 간단한 단일 라이너 여야한다고 생각합니다.


재미 있네요 저는 일종의 Mac / Linux / Unix / Bash noob입니다. coreutils에 대해 자세히 설명하고 Mac에 설치하는 방법은 무엇입니까? 감사!
Aseem Kishore

2

다른 답변을 한 단계 더 발전 시키면 ~ / .bashrc 또는 ~ / .zshrc에 함수를 추가하여 날짜 -I플래그 를 추가 할 수 있습니다 .

date() {
  if [ "$1" = "-I" ]; then
    command date "+%Y-%m-%dT%H:%M:%S%z"
  else
  command date "$@"
  fi
}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.