LINUX.ORG.RU

История изменений

Исправление next_time, (текущая версия) :

строка даты в общем случае содержит 3 числа и разделители число длиной 4 цифры — всегда год

алгоритм будет такой: парсится первое число. вариант а) если оно состоит из 4 цифр, то следующее число — обозначает месяц, а 3-е чило — день. вариант б) если оно состоит из 2 цифр, то оно обозначает день, следующее число обозначает месяц, а 3-е — год.

далее проверки. если хотя бы одно из чисел состоит из трёх цифр, значит это не дата. если между цифрами больше 3-х разделителей (любой нецифровой символ принимается за разделитель), значит это не дата. если напарсилось только 2 числа, значит — это не дата. Если одно, но число цифр в нём не равно 6 или 8 — значит это не дата, в противном случае первые пары цифр == число и месяц соответственно, последние цифры означают год.

после того год, месяц и число будут определены, проверить валидность даты. если неверная, поменять число и месяц местами, если снова не верная, значит — ошибка. далее, если год < 100, то год += 2000.

собственно, всё. данный алгоритм верно покрывает 90% случаев. если надо выцепить хоть какие-то данные, а ошибки не критичны, то он вам подойдёт.

время парсится аналогично, только там даже попроще будет

Исходная версия next_time, :

1-й случай строка даты в общем случае содержит 3 числа и разделители число длиной 4 цифры — всегда год

алгоритм будет такой: парсится первое число. вариант а) если оно состоит из 4 цифр, то следующее число — обозначает месяц, а 3-е чило — день. вариант б) если оно состоит из 2 цифр, то оно обозначает день, следующее число обозначает месяц, а 3-е — год.

далее проверки. если хотя бы одно из чисел состоит из трёх цифр, значит это не дата. если между цифрами больше 3-х разделителей (любой нецифровой символ принимается за разделитель), значит это не дата. если напарсилось только 2 числа, значит — это не дата. Если одно, но число цифр в нём не равно 6 или 8 — значит это не дата, в противном случае первые пары цифр == число и месяц соответственно, последние цифры означают год.

после того год, месяц и число будут определены, проверить валидность даты. если неверная, поменять число и месяц местами, если снова не верная, значит — ошибка. далее, если год < 100, то год += 2000.

собственно, всё. данный алгоритм верно покрывает 90% случаев. если надо выцепить хоть какие-то данные, а ошибки не критичны, то он вам подойдёт.