Как я могу изменить формат даты из командной строки?

StackOverflow https://stackoverflow.com/questions/279329

  •  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 является неправильной, поскольку в ней не перечислены эти параметры, которые работают.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top