Проверьте скрипт datetime через bash (т. Е. «20200204a») - PullRequest
0 голосов
/ 05 февраля 2020

Проверка формата даты в сценарии оболочки

$ date "+%Y%m%d" -d "20200204" > /dev/null  2>&1 ; echo $?
0

$ date "+%Y%m%d" -d "202002/04" > /dev/null  2>&1; echo $?
1

$ date "+%Y%m%d" -d "20200204a" > /dev/null  2>&1 ; echo $?
0

Как видите, недопустимая входная строка даты и времени "20200204a" прошла тест.

Вопрос> Есть Есть ли способ добавить более строгие проверки для этого ввода?

Спасибо

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

В Python 3 вы можете сделать это:

echo "20200204" | python3 -c '
import sys
import datetime
try:
    datetime.datetime.strptime(sys.stdin.read().rstrip(), "%Y%m%d")
except ValueError:
    exit(1)' 

В случае ошибки будет возвращено 1.

0 голосов
/ 05 февраля 2020

Формат +% управляет выводом, а не вводом.

Perl на помощь!

perl -MTime::Piece -e '
    $d = shift;
    Time::Piece->strptime($d, "%Y%m%d")->strftime("%Y%m%d") eq $d
    or exit 1
' "20210229" 2>/dev/null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...