以前,此功能对我有用...
$this_day = Day_of_Week($lyear, $month, $day);
使用这个库..
use Date::Calc qw(Add_Delta_Days Day_of_Week Delta_Days);
但我需要另一种方法来获取相同的信息。
它返回的错误是
Date::Calc::Day_of_Week(): not a valid date
有任何想法吗?
以前,此功能对我有用...
$this_day = Day_of_Week($lyear, $month, $day);
使用这个库..
use Date::Calc qw(Add_Delta_Days Day_of_Week Delta_Days);
但我需要另一种方法来获取相同的信息。
它返回的错误是
Date::Calc::Day_of_Week(): not a valid date
有任何想法吗?
错误消息说您传递 Date::Calc 一个无效的日期。不要那样做。您可以使用 Date::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');
更正无效日期更复杂,因为这取决于您如何获得无效日期,以及您想对它们做什么。例如,如果日期可能超出范围,并且您想将 4 月 31 日更正为 5 月 1 日,则可以使用
($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);
它有点巴洛克风格,但我一直很喜欢 Date::Manip。
不过,我认为您不需要替代方法。更有可能的是,您需要停止提供 Date::Calc 无效日期。
它在什么值上出错?
您可以使用Date::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...