Perché Date :: Calc lamentano “Non una data valida”?
-
05-09-2019 - |
Domanda
In precedenza, questa funzione ha lavorato per me ...
$this_day = Day_of_Week($lyear, $month, $day);
utilizzando questo lib ..
use Date::Calc qw(Add_Delta_Days Day_of_Week Delta_Days);
Ma ho bisogno di un altro modo per ottenere questo stesse informazioni.
l'errore è tornato è
Date::Calc::Day_of_Week(): not a valid date
Tutte le idee?
Soluzione
Il messaggio di errore dice che si sta passando Date :: Calc una data non valida. Non farlo. È possibile utilizzare la funzione Data :: check_date di Calc per decidere se la data è valida.
use Date::Calc qw(Add_Delta_Days check_date Day_of_Week Delta_Days);
$this_day = (check_date($lyear, $month, $day)
? Day_of_Week($lyear, $month, $day)
: 'INVALID');
Correzione date non valide è più complicato, perché dipende da come si sta ricevendo le date non valide, e che cosa si vuole fare su di loro. Ad esempio, se la giornata potrebbe essere fuori portata, e si voleva correggere 31 aprile - 1 maggio, è possibile utilizzare
($lyear, $month, $day) = Add_Delta_Days($lyear, $month, 1, $day-1);
Ma questo non correggere un anno o un mese non valido.
Altri suggerimenti
use Posix qw(mktime);
my $epoch = mktime(sec, min, hour, mday, mon, year);
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($epoch);
E 'un po' barocco, ma ho sempre piaciuto Data :: Manip.
Non credo che una metodologia alternativa è quello che serve, però. Più probabilmente, è necessario smettere di alimentare Date :: Calc date non valide.
quali valori è erroring su?
Si potrebbe utilizzare Data :: Simple .
use Date::Simple (':all');
my $date = ymd($year, $month, $day);
my $dow = $date->day_of_week();
In alternativa alla risposta di heeen, è possibile utilizzare strftime:
use Posix qw(strftime);
my $wday = strftime('%w', sec, min, hour, mday, mon, year); # 0 = Sunday, 1 = Monday, etc...
my $day_name = strftime('%a', sec, min, hour, mday, mon, year); # Sun, Mon, etc...
my $day_name_long = strftime('%A', sec, min, hour, mday, mon, year); # Sunday, Monday, etc...