Как проверить дату в формате ГГГГ-ММ-ДД в Perl?

Связанный/возможный дубликат: Как проверить даты в Perl?

Я создал сценарий, в котором дата начала и окончания должна быть указана пользователем при выполнении сценария. Формат даты, введенный пользователем, должен быть только в формате YYYY-MM-DD.

start_date = $ARGV[0];
end_date = $ARGV[1];

пожалуйста, порекомендуйте.


person Space    schedule 11.08.2009    source источник


Ответы (3)


Предполагая, что вы имеете в виду

$start_date = $ARGV[0];
$end_date = $ARGV[1];

синтаксически допустимый код Perl, то вы можете сделать что-то вроде

die "Please enter dates in YYYY-MM-DD format\n"
    unless $start_date =~ /^\d{4}-\d\d-\d\d$/;
die "Please enter dates in YYYY-MM-DD format\n"
    unless $end_date =~ /^\d{4}-\d\d-\d\d$/;
person chaos    schedule 11.08.2009

Как отмечают другие, это можно сделать с помощью регулярных выражений. Однако, если вы хотите быстро реализовать полное и надежное решение, CPAN — ваш друг.

Эта статья TechRepublic содержит хорошее сравнение модулей даты и времени на CPAN.

Для вашего конкретного использования вы должны учитывать Time::Normalize. См. раздел документации Diagnostics.

См. также Как проверить даты в Perl? на SO.

person Tim Henigan    schedule 11.08.2009

Первый,

my ($start_date, $end_date) = @ARGV;

тоже работает.

if ( $var =~ /^(?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2})$/ ) {
    # see %+ in perldoc perlvar

Теперь вам нужно убедиться, что значения действительны в годах, месяцах и днях.

person Sinan Ünür    schedule 11.08.2009
comment
Вы должны заметить, что именованные захваты требуют Perl 5.10 и (вероятно) предоставляют запасной вариант для более старых версий. - person Michael Carman; 11.08.2009