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

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

2008-06-01

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

Sun 1st June 2008

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
9 280
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

date -d yyyy-mm-dd

Если вам нужен больший контроль над форматированием, вы также можете добавить его следующим образом:

date -d yyyy-mm-dd +%a

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

Извините, я просто получаю сообщение об ошибке. Запуск GNU bash, версия 3.2.17 (1) -release (i386-apple-darwin9.0)

Dycey 11.11.2008 01:10

Это работает на моей машине Debian. По-видимому, не так на Mac. Извиняюсь.

bdumitriu 11.11.2008 01:18
Ответ принят как подходящий
$ 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, чтобы избежать проблем с локализацией.

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), и, насколько известно, дата -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.

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

-j   Do not try to set the date.  This allows you to use the -f flag
     in addition to the + option to convert one date format to another.

На самом деле, в OS X вы бы не увидели этого на странице руководства date (1).

brian d foy 11.11.2008 01:48
Значит, у Apple есть проблема.
Jay Mooney 11.11.2008 01:56

Серьезно? Система комментариев использует разметку, отличную от ответов?

Jay Mooney 11.11.2008 01:56

Ха, у Apple есть разные страницы руководства в Интернете, чем те, которые они установили. Я заметил это и с другими инструментами.

brian d foy 11.11.2008 08:17

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

Спасибо.

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

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

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

Смотрите man-страницы date и strftime для более подробной информации. Однако справочная страница даты в OS X неверна, поскольку в ней не перечислены эти работающие параметры.

Другие вопросы по теме