Как я могу изменить формат даты из командной строки?
-
07-07-2019 - |
Вопрос
Какой самый быстрый способ преобразовать дату, скажем, в один формат
2008-06-01
на дату в другом формате, скажем
Солнце, 1 июня 2008 года
Важным моментом на самом деле является "Солнце", потому что в зависимости от названия дня мне может понадобиться изменить другие параметры - недетерминированным образом.Я использую GNU bash, версия 3.2.17 (1)-release (i386-apple-darwin9.0).
[Предыстория:Причина, по которой я хочу сделать это из командной строки, заключается в том, что на самом деле я хочу записать это в команду TextMate...Это раздражающая задача, которую мне постоянно приходится выполнять в TextMate.]
Решение
$ date -d '2005-06-30' +'%a %F'
Thu 2005-06-30
Видишь man date
для других параметров формата.
Эта опция доступна в Linux, но не в Darwin.В Darwin вместо этого вы можете использовать следующий синтаксис:
date -j -f "%Y-%m-%d" 2006-06-30 +"%a %F"
Аргумент -f задает формат ввода, а аргумент + задает формат вывода.
Как указано на другом плакате ниже, было бы разумно использовать %u (числовой день недели), а не %a, чтобы избежать проблем с локализацией.
Другие советы
Читая дата (1) страница руководства открыла бы:
-джей Do not try to set the date. This allows you to use the -f flag in addition to the + option to преобразование одного формата даты в другой.
Спасибо за это, sgm.Так что просто для того, чтобы я мог вернуться и сослаться на это -
date -j -f "%Y-%m-%d" "2008-01-03" +"%a%e %b %Y"
^ ^ ^
parse using | output using
this format | this format
|
date expressed in
parsing format
Thu 3 Jan 2008
Спасибо.
date -d yyyy-mm-dd
Если вы хотите больше контролировать форматирование, вы также можете добавить его следующим образом:
date -d yyyy-mm-dd +%a
просто получить Солнечную часть, которую, по твоим словам, ты хочешь.
date -d ...
похоже, это не сокращает, так как я получаю ошибку использования:
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Я использую GNU bash, версия 3.2.17 (1)-release (i386-apple-darwin9.0), и, насколько известно man, date -d предназначен только для
-d dst Set the kernel's value for daylight saving time. If dst is non-
zero, future calls to gettimeofday(2) will return a non-zero for
tz_dsttime.
Если вы просто хотите узнать день недели, не пытайтесь сопоставлять строки.Это прерывается при изменении локали.В %u
формат дает вам номер дня:
$ date -j -f "%Y-%m-%d" "2008-01-03" +"%u"
4
И действительно, это был четверг.Вы можете использовать это число для индексации в массив, который есть у вас в вашей программе, или просто использовать само число.
Смотрите справочные страницы date и strftime для получения более подробной информации.Однако справочная страница date в OS X является неправильной, поскольку в ней не перечислены эти параметры, которые работают.