Auf dieser Seite habe ich eine kompakte Perl-Routine gefunden, die überprüft, ob ein eingegebenes Datum tatsächlich existiert. Beispiele: Ein "2012-08-17" wirft eine 1 (gültiges Datum) zurück, ein "2012-02-31" eine 0 (kein gültiges Datum, da der Februar maximal 29 Tage hat). Dabei berücksichtigt die Routine sogar Schaltjahre.

Für meine Anwendung müßte ich die Routine um die Überprüfung einer Zeitangabe erweitern. Der Code von obiger Seite sieht dann geringfügig erweitert (siehe gelbe Markierungen) so aus:

# Check if date time input is valid. If valid return 1, else return 0
# Adapted and expanded to cover time from:
# http://www.regular-expressions.info/dates.html
sub valid_date_time
{
my $input = shift;

if ($input =~ m!^((?:19|20)\d\d)[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01]) \s+([01][0-9]|2[0-3])[/:.]([0-5][0-9])[/:.]([0-5][0-9]) $!)
{
# At this point, $1 holds the year, $2 the month and $3 the day,
# $4 the hours, $5 the minutes and $6 the seconds of the date/time entered
if ($3 == 31 and ($2 == 4 or $2 == 6 or $2 == 9 or $2 == 11))
{
return 0; # 31st of a month with 30 days
} elsif ($3 >= 30 and $2 == 2)
{
return 0; # February 30th or 31st
} elsif ($2 == 2 and $3 == 29 and not ($1 % 4 == 0 and ($1 % 100 != 0 or $1 % 400 == 0)))
{
return 0; # February 29th outside a leap year
} else
{
return 1; # Valid date/time
}
} else
{
return 0; # No valid date/time
}
}