В скрипте 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? Спасибо!
2011-08-27
и другое2011-08-27T18:55:43Z
- форматы ISO 8601. И действительно, редактирование вопроса было бы более полезным, чем рассредоточение обновлений по нескольким комментариям. Пример того, что вы пытаетесь напечатать, будет идеальным.brew
(который использует префикс 'g'),gdate -I
он работал вместе с другими флагами GNU.Ответы:
Вы могли бы использовать
Или для даты , полностью соответствующей ISO-8601 , используйте один из следующих форматов:
Вывод:
или
Вывод:
источник
date -u +"%Y-%m-%dT%H:%MZ"
именно то, что я искал.Z
и+00:00
одинаковы (в основном). В целях перевода времени они оба означают UTC. Однако Англия+00:00
зимой и+01:00
летом (BST).Z
это UTC, а время+00:00
GMT. UTC не является часовым поясом и не имеет смещения; Смещение определяется как разница во времени между часовым поясом и UTC, стандартом измерения времени. Время по Гринвичу +00: 00 удалено из UTC (а BST, как вы говорите, +01: 00 удалено из UTC).В GNU дата
date -I
такая же, какdate +%F
и,-Iseconds
а-Iminutes
также включает время со смещением UTC.-u
это какTZ=UTC
.+00:00
можно заменить наZ
.Это также допустимые форматы даты и времени ISO 8601:
Это не:
источник
Короткая альтернатива, которая работает как для GNU, так и для даты BSD:
источник
date -u +%FT%TZ
потому что в UTC смещение будет равно нулюПакет coreutils предоставляет GNU-версии инструментов. Установить:
Вы можете увидеть, что предоставляется:
Обратите внимание, это приходит с датой:
Это стандартная команда даты GNU, поэтому для нее потребуется ключ -I:
источник
gdate --iso-8601=ns
2016-09-29T16: 54: 23,485230000 + 02: 00Просто используйте обычные
date
параметры форматирования:Изменить: чтобы включить время и UTC, они эквивалентны:
источник
Это не особенность Bash, это особенность
date
двоичного кода. В Linux вы обычно используете версию GNU coreutilsdate
, тогда как в OSX вы используете устаревшие утилиты BSD. Версия GNU, безусловно, может быть установлена как необязательный пакет, или вы можете выполнить замену самостоятельно - я считаю, что это должна быть простая однострочная программа, например, в Perl.источник
Продвинув остальные ответы на шаг вперед, вы можете добавить функцию в ~ / .bashrc или ~ / .zshrc, чтобы добавить
-I
флаг даты :источник
Предварительно скомпилированный
coreutils
пакет для Mac OS X доступен по адресу:http://rudix.org/packages-abc.html#coreutils .
источник