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


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.
Жиль "ТАК ... перестать быть злым"

5

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.