我有一个例程来确定它是周末还是工作日,但它在周五无法正常工作。
我创建了一个测试程序,以便了解为什么在晚上7点(19:00:00)之前,例行程序将当天视为工作日和晚上7点,之后将当天视为周末。
#!/usr/bin/perl
use DateTime;
MONTHCHECK:
my ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset,
$dayOfWeek, $dayOfYear, $daylightSavings) = localtime();
my @abbr = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dcm);
my $mnth = $abbr[$month];
WEEKENDCHECK:
if ( DateTime->today->day_of_week >= 6 && day_of_week <= 7 ) {
print "$dayOfWeek is today \n";
goto HOLIDAY;
} else {
print "going to weekday";
goto WEEKDAY;
}
WEEKDAY:
print "weekday section month is $mnth \n";
goto END;
HOLIDAY:
my $h = "h";
my $mth = join "", $mnth, $h;
print "holiday section month is $mth \n";
goto END;
END:
print "$date is the day and $hour hr \n";
print "$date is the day \n";
exit(0);
在18:50:00之前,我得到了正确的结果:
going to weekday5 is today
weekday section month is Jan
29-01-2016 is the day and 18 hr
It is now Fri Jan 29 18:50:02 2016
19:00:00后,我得到以下结果:
5 is today
holiday section month is Janh
is the day and 19 hr
It is now Fri Jan 29 19:04:21 2016
答案 0 :(得分:3)
您显示的代码没有产生该输出。例如,变量$date
从未设置,但输出表明它在18:50时等于29-01-2016
。后来,在19:04,它似乎是空的,正如我所料。也没有代码可以生成出现在两个输出样本末尾的It is now
行
差异很可能是因为您更改了代码,而不是因为DateTime
在晚上7点后行为不端
请注意,localtime
返回的工作日值周六为6,周日为0,而DateTime
模块的day_of_week
方法周六使用6,周日使用7 。你应该坚持一个或另一个
如果您认为自己有真正的问题,请添加use strict
和use warnings 'all'
,修复出现的错误并将新程序与相同代码的运行一起发布晚上7点之前和之后。这将使我们能够进一步帮助您
答案 1 :(得分:0)
DateTime->now()
和DateTime->today()
使用UTC时间。
例如,如果你是美国东部标准时区,这意味着周一美国东部时间18:59:59周一它是星期一23:59:59 UTC,但是周一美国东部时间19:00:01它&# 39;星期二00:00:01 UTC。
要获取当地的某一天,请将时区名称(例如America/Denver
)或local
作为time_zone
参数传递:
my $today1 = DateTime->today(time_zone=>'America/New_York');
my $today2 = DateTime->today(time_zone=>'local');
另外,正如其他人所说,你真的应该用
开始你的脚本use strict;
use warnings;
这会在您当前的版本中找到几个错误。