команда "дата" в OS X не имеет опции ISO 8601 "- I"?
в скрипте 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? Спасибо!
7 ответов:
вы могли бы использовать
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
в GNU дата
date -I
это то же самое, чтоdate +%F
и-Iseconds
и-Iminutes
также включить время со смещением UTC.$ 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)
пакет coreutils предоставляет версии инструментов GNU. Для установки:
$ brew install coreutils
вы можете увидеть, что при условии:
$ brew list coreutils
обратите внимание, что он поставляется с датой:
$ brew list coreutils | grep date
это стандартная команда GNU date, поэтому она примет переключатель-I:
$ gdate -I 2016-08-09
просто использовать нормальный
date
параметры форматирования:date '+%Y-%m-%d'
Edit: чтобы включить время и UTC, они эквивалентны:
date -u -Iseconds date -u '+%Y-%m-%dT%k:%M:%S%z'
это не особенность Bash, это особенность
date
бинарный. В Linux у вас обычно будет версия GNU coreutilsdate
, в то время как на OSX у вас будут утилиты BSD legacy. Версия GNU, безусловно, может быть установлена как дополнительный пакет, или вы можете свернуть свою собственную замену - я считаю, что она должна быть простой однострочной, например, в Perl.