LINUX.ORG.RU

bash. Проверить корректность даты

 ,


0

5

Привет. Есть дата, нужно проверить, корректная она или нет. Например, 29/02/1604 — корректная, 29/02/1603 — неправильная (29 февраля в не високосном году)

Можно сделать так:

date --date='1604-02-29'  +%d/%m/%Y 
всё супер. Но проблема в том, что мне надо входную дату задавать не «1604-02-29», а «02/29/1604»

Ну типа такого, но чтобы работало:

date --date="+%d/%m/%Y 29/02/1604"  +%d/%m/%Y 

Возможно ли это реализовать? Или придётся сначала привести дату в нужный формат?

★★★

FORMAT controls the output.

Надо какую-то другую программу или ЯП.

anonymous
()
31 декабря 2015 г.

import datetime

anonymous
()
d='02/29/1604'
date --date="$(echo $d | awk -F '/' '{print $3"-"$1"-"$2}')"  +%d/%m/%Y

Это то что ты попросил.

Но вообще лучше поступить как советуют, и взять какой-то язык который умеет в время.

iu0v1
()
Последнее исправление: iu0v1 (всего исправлений: 2)

Или придётся сначала привести дату в нужный формат?

А это что, проблема?

$ IFS='/' read d m Y <<< '29/02/1604'
$ if date &> /dev/null --date "$Y-$m-$d"; then echo 'correct'; else echo 'incorrect'; fi
correct

P. S. Нет, закрыть дескриптор или еще как-то заткнуть date без /dev/null’а, кажется, нельзя.

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)

info date говорит, что дата принимается в одном из множества форматов, но со слешами там только американский месяц/день/год, так что awk/sed/shell в помощь. Из опыта могу сказать, что если дат много, то лучше использовать date --file= т.к. вызов date очень тормозной.

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