Как я могу изменить формат даты из командной строки? - PullRequest
4 голосов
/ 11 ноября 2008

Какой самый быстрый способ конвертировать дату в один формат, скажем,

2008-06-01

на дату в другом формате, скажем

вс 1 июня 2008

Важным битом на самом деле является «Солнце», потому что, в зависимости от имени дня, мне может понадобиться возиться с другими вещами - недетерминированным образом. Я использую GNU bash, версия 3.2.17 (1) -релиз (i386-apple-darwin9.0).

[Справочная информация: причина, по которой я хочу сделать это из командной строки, заключается в том, что я действительно хочу записать это в команду TextMate ... Это раздражающая задача, которую я должен делать все время в textMate. ]

Ответы [ 6 ]

8 голосов
/ 11 ноября 2008
$ date -d '2005-06-30' +'%a %F'
Thu 2005-06-30

См. man date для других вариантов формата.

Эта опция доступна в Linux, но не в Darwin. В Дарвине вы можете использовать следующий синтаксис:

date -j -f "%Y-%m-%d" 2006-06-30 +"%a %F"

Аргумент -f указывает формат ввода, а аргумент + - формат вывода.

Как указывает другой представитель ниже, было бы разумно использовать% u (числовой день недели) вместо% a, чтобы избежать проблем с локализацией.

1 голос
/ 11 ноября 2008

Спасибо за это 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

Спасибо.

1 голос
/ 11 ноября 2008

Чтение справочной страницы (1) показало бы:

<b>-j</b>   Do not try to set the date.  This allows you to use the -f flag
     in addition to the + option to <i>convert one date format to another</i>.
0 голосов
/ 11 ноября 2008

Если вы просто хотите узнать день недели, не пытайтесь сопоставлять строки. Это ломается, когда язык меняется. Формат %u дает вам номер дня:

 $ date -j -f "%Y-%m-%d" "2008-01-03" +"%u"
 4

И действительно, это был четверг. Вы можете использовать это число для индексации массива, имеющегося в вашей программе, или просто использовать само число.

Для получения дополнительной информации см. Справочные страницы даты и времени. Однако страница управления датами в OS X неверна, поскольку в ней не указаны эти параметры.

0 голосов
/ 11 ноября 2008
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) -релиз (i386-apple-darwin9.0), и, насколько известно, дата -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.
0 голосов
/ 11 ноября 2008
date -d yyyy-mm-dd

Если вы хотите больше контроля над форматированием, вы также можете добавить его так:

date -d yyyy-mm-dd +%a

просто чтобы получить часть Солнца, которую, как вы говорите, вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...