Як вказати формат введення на сьогоднішній день?


19

Дату та час у форматі, який не розпізнається date, як я можу dateрозпізнати дату та час?

Наприклад:

$ date -d "09SEP2012:23:58:46"
date: invalid date `09SEP2012:23:58:46'
$ date -d "09SEP2012:23:58:46" --magic-option "ddMMMYYY:hh:mm:ss"
Sun Sep  9 23:58:46 MDT 2012

Чи --magic-optionіснує? Якщо ні, чи є більш елегантний спосіб вирішити це питання, а не використовувати sedдля перетворення вхідних даних у добре сформовану рядок дати?


Відповіді:


10

Ні дата POSIX, ні дата GNU не мають --magic-option. FreeBSD викликає його -f(з синтаксисом, подібним dateспецифікаторам вихідного формату, а не тим, який ви пропонуєте).

Ваша дата дуже близька до розпізнавання датою GNU: потрібно лише замінити двокрапку, яка відокремлює дату від часу пробілом.

date -d "$(echo "09SEP2012:23:58:46" | sed 's/:/ /')"

1
і зі спеціальними форматами? Єдиний шлях - це регулярні вирази? це жахливо :-(
phil294

1
Ви не можете розбирати дати, не знаючи чогось про формат, в якому вони є, класичний приклад 01/02/03.
Жил 'SO- перестань бути злим'

5

Я написав купу інструментів ( dateutils ), які розглядають дати та часи більш зручним для сценарію способом. Ваш магічний варіант є --input-format|-i, наприклад:

dconv -i '%d%b%Y:%H:%M:%S' "09SEP2012:23:58:46"
=>
  2012-09-09T23:58:46

Хоча dconvпрямо не підтримує dateформат виведення «s (це не дає TZабо що - небудь в навколишньому середовищі), є інструмент strptimeв dateutils , який дійсно підтримує %Zспецифікатор формату.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.