LINUX.ORG.RU

чтение даты с кастомным форматом

 , ,


0

1

командой date с ключем -d можно прочитать дату и вывести в стандартном виде:

$ date -d "05/16/14 14:45:33"
Fri May 16 14:45:33 MSK 2014
или вывести в заданном формате:
$ date -d "05/16/14 14:45:33" +"%d.%m.%y %T"
16.05.14 14:45:33
Как date понимает в каком формате читать указанную дату? Ведь, к примеру, если указывать - вместо /, то воспринимаемый формат даты будет %y-%m-%d вместо %m/%d/%y :
$ date -d "15-05-14 14:45:33" +"%d.%m.%y %T"
14.05.15 14:45:33
Как можно сразу сказать date-у в каком формате читать дату?


В info date всё это описанно. Хотя, конечно кривовато сделано — там разные евристики, что бы гадать, что хотел сказать пользователь. (И это всё конечно GNU-only. В bsd/osx параметр -d выставляет daylightsaving)

В Go например это сделано проще и по другому. Фиксированная дата «Mon Jan 2 15:04:05 MST 2006» которую можно переставлять как угодно в качестве темплейта.

beastie ★★★★★
()
date --help
Использование: date [КЛЮЧ]… [+ФОРМАТ]
       или:    date [-u|--utc|--universal] [ММДДччмм[[ВВ]ГГ][.сс]]
Выводит текущее время в заданном ФОРМАТЕ, или изменяет время в системе.
.......................................................................
ФОРМАТ управляет выводом. Воспринимаются следующие последовательности:

дальше сам

novitchok ★★★★★
()
Ответ на: комментарий от beastie

Фиксированная дата «Mon Jan 2 15:04:05 MST 2006» которую можно переставлять как угодно в качестве темплейта.

прикольно. а локализацию оно умеет?

MyTrooName ★★★★★
()
Ответ на: комментарий от novitchok

в help-е и в man-е есть описание вывода даты с заданным форматом, но не чтения в заданном формате

к примеру, требуется, чтобы была адекватно воспринята команда:

$ date -d "25.01.14"
где формат день.месяц.год (%d.%m.%y)

glztmf
() автор топика
Ответ на: комментарий от glztmf

как вариант придумалось только:

$ date -d `echo 25.01.14 | awk -F . '{print $2"/"$1"/"$3}'`
Sat Jan 25 00:00:00 MSK 2014

glztmf
() автор топика
Ответ на: комментарий от glztmf

чтения в заданном формате

или:    date [-u|--utc|--universal] [ММДДччмм[[ВВ]ГГ][.сс]]

что тебе не понятно, date читает в формате месяц-день-час-минута и никак иначе.

novitchok ★★★★★
()
Ответ на: комментарий от novitchok

если никак иначе, почему тогда date -d по разному воспринимает даты 01/02/03 и 01-02-03 :

$ date -d 01/02/03
Thu Jan  2 00:00:00 MSK 2003
$ date -d 01-02-03
Sat Feb  3 00:00:00 MSK 2001

и utc здесь ни при чем (это вывод в utc, а не ввод):

$ date -d 01/02/03 -u
Thu Jan  2 00:00:00 UTC 2003
$ date -d 01-02-03 -u
Sat Feb  3 00:00:00 UTC 2001

glztmf
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.