なぜ日:: Calcは「無効な日付」に文句を言うのでしょうか?
-
05-09-2019 - |
質問
以前、この関数は私のために働いていた...
$this_day = Day_of_Week($lyear, $month, $day);
このLIBを使用して..
use Date::Calc qw(Add_Delta_Days Day_of_Week Delta_Days);
しかし、私はこれと同じ情報を取得するために別の方法が必要になります。
それが返されるエラーがある
Date::Calc::Day_of_Week(): not a valid date
任意のアイデア?
解決
エラーメッセージは、日:: Calcの無効な日付を渡していると言います。それをしないでください。あなたは、日付が有効かどうかを決定する日:: Calcのcheck_date機能を使用することができます。
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');
それはあなたが無効な日付、およびあなたがそれらについて何をしたいを取得しているかに依存するため、無効な日付を修正すること、より複雑です。例えば、日が範囲外であるかもしれない、とあなたは5月1日に4月31日を訂正したい場合、あなたは使用することができます。
($lyear, $month, $day) = Add_Delta_Days($lyear, $month, 1, $day-1);
しかし、それは無効年または月を修正しません。
他のヒント
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);
これは少しバロック様式だが、私はいつも日::マニピュレータ言っています。
私は、しかし、別の方法は何が必要だとは思いません。それどころか、あなたは日:: Calcの無効な日付を供給停止する必要があります。
どのような値には、上のerroringされる?
あなたは日:: Simpleはして使用することができます。
use Date::Simple (':all');
my $date = ymd($year, $month, $day);
my $dow = $date->day_of_week();
heeenの答えの代わりに、あなたはは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...
所属していません StackOverflow