Perl 如何在每个月的第一个工作日运行脚本?
我必须在每个月的第一个工作日运行脚本。请建议我如何用Perl实现它 比方说,如果该国是国定假日,剧本应该在第二个工作日播出。Perl 如何在每个月的第一个工作日运行脚本?,perl,unix,Perl,Unix,我必须在每个月的第一个工作日运行脚本。请建议我如何用Perl实现它 比方说,如果该国是国定假日,剧本应该在第二个工作日播出。 我有一个二进制文件,如果上一个工作日是特定国家/地区的假日,它将为我提供上一个工作日的输出。我建议您在周一至周五每天使用cron运行一次脚本 然后,脚本将进行初始测试,如果测试失败,则退出 测试将是(伪代码): 您必须编写自己的public\u holiday函数来返回一个真值,具体取决于某个日期是否是您所在州/国家的公共假日。CPAN包date::Manip有各种好东西
我有一个二进制文件,如果上一个工作日是特定国家/地区的假日,它将为我提供上一个工作日的输出。我建议您在周一至周五每天使用
cron
运行一次脚本
然后,脚本将进行初始测试,如果测试失败,则退出
测试将是(伪代码):
您必须编写自己的
public\u holiday
函数来返回一个真值,具体取决于某个日期是否是您所在州/国家的公共假日。CPAN包date::Manip
有各种好东西来支持这类事情。”Date_NextWorkDay()对您来说似乎最合适。您可以扩展“上一个工作日的输出”吗?如果不是假日,它会给出什么?今天的日期,输出将是“101001”,即yearmonthdate,如果我在8月1日运行,您可以扩展“在那个国家”吗?你对哪些国家感兴趣?但假设周一既不是假日也不是周末,它就开始了。。但是如何防止在星期二运行。它不会在星期二运行,因为上面的代码会检测到星期一是有效的一天,然后退出。阅读上面的伪代码。
if ( isWeekend( today ) ) {
exit;
} elsif ( public_holiday( today ) ) {
exit;
}
for ( day_of_month = 1; day_of_month < today; day_of_month++ ) {
next if ( isWeekend( day_of_month ) );
if ( ! public_holiday( day_of_month ) ) {
# a valid day earlier in the month wasn't a public holiday
# thus this script MUST have successfully run, so exit
exit;
}
}
# run script, because today is NOT the weekend, NOT a public holiday, and
# no possible valid days for running exist earlier in this month
1;
sub isWeekend {
my ( $epoch_time ) = @_;
my $day_of_week = ( localtime( $epoch_time ) )[6];
return( 1 ) if ( $day_of_week == 0 ); # Sunday
return( 1 ) if ( $day_of_week == 6 ); # Saturday
return( 0 );
}