以前,这个功能对我有用......
$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
有什么想法吗?
答案 0 :(得分:4)
错误消息显示您正在传递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);
但这不会纠正无效的年份或月份。
答案 1 :(得分:2)
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);
答案 2 :(得分:2)
这是一个小巴洛克式,但我总是喜欢Date :: Manip。
我认为不需要替代方法。更有可能的是,您需要停止提供Date :: Calc无效日期。
它出现了什么价值?
答案 3 :(得分:1)
您可以使用Date::Simple。
use Date::Simple (':all');
my $date = ymd($year, $month, $day);
my $dow = $date->day_of_week();
答案 4 :(得分:1)
作为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...