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?

È stato utile?

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...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top