是否有一个Perl模块可以给我输入月份和年份,比方说,06-2005,这个月的最后一天是什么?对于这个例子,它很容易,因为6月总是有30天,所以最后一天将是30-06-2005。但二月并非如此。所以,如果我有02-1997,我想知道是否要返回28-02-1997或29-02-1997。提前谢谢。
答案 0 :(得分:0)
是的,Days_in_Month
模块中有一个子例程Date::Calc
。
use strict;
use warnings;
use Date::Calc qw/Days_in_Month/;
for my $m (1 .. 12) {
print Days_in_Month(2005, $m), "\n";
}
<强>输出强>
31
28
31
30
31
30
31
31
30
31
30
31
答案 1 :(得分:0)
指定月份的最后一天是下个月的“第0天”。 mktime()采用基于0的月份和基于1900的年份编号,并返回一个纪元时间戳。
use POSIX qw( mktime strftime );
sub last_day {
my ( $year, $mon ) = @_;
return mktime(0,0,0, 0, $mon, $year-1900);
}
您可以将其传递给localtime
或strftime
。
say scalar localtime last_day(2005, 5)
'Tue May 31 00:00:00 2005'
say scalar localtime last_day(2005, 6)
'Thu Jun 30 00:00:00 2005'
say scalar localtime last_day(1997, 2)
'Fri Feb 28 00:00:00 1997'
say scalar localtime last_day(2012, 2)
'Wed Feb 29 00:00:00 2012'
say (localtime last_day(1997, 2))[3]
'28'
say strftime "%d", localtime last_day(1997, 2)
'28'
答案 2 :(得分:0)
正如其他人所说,使用DateTime
:
use DateTime;
my $dt = DateTime->last_day_of_month('year'=>2000, 'month'=>2);
print $dt->ymd; # '2000-02-29'
虽然DateTime可能不是处理日期/时间的最快模块,但它绝对是最完整的模块。它也是唯一能够正确处理日期/时间数学怪癖的人。