使用linux命令或perl,
如何获得2010年的所有星期一日期
例如:
20100104 --------这是2010年1月1日 20100111 20100118 20100125
20101206 20101213 20101220 20101227 --------这是2010年1月12日星期一
答案 0 :(得分:7)
您可以使用DateTime
:
#!/usr/bin/env perl
use strict;
use warnings;
use DateTime;
my $year = 2010;
my $dt = DateTime->new(
'year' => $year,
'month' => 1,
'day' => 1,
);
# find first Monday
while ( $dt->day_name() ne 'Monday' ) {
$dt->add( 'days' => 1 );
}
while ( $dt->year() == $year ) {
print $dt->strftime("%Y%m%d\n");
$dt->add( 'weeks' => 1 );
}
答案 1 :(得分:1)
我可能会以与Alan的解决方案非常相似的方式使用DateTime。但是有趣的是看看如何使用Perl的内置日期处理工具来实现它。
#!/usr/bin/perl
use strict;
use warnings;
use POSIX 'strftime';
use Time::Local;
my $ONE_DAY = 24 * 60 * 60;
my $ONE_WEEK = 7 * $ONE_DAY;
my $year = shift || 2010;
# Get Jan 1st
my $date = timelocal 0, 0, 0, 1, 0, $year - 1900;
# Get first monday
until (strftime('%a', localtime $date) eq 'Mon') {
$date += $ONE_DAY;
}
while (strftime('%Y', localtime $date) == $year) {
print strftime('%Y%m%d', localtime $date), "\n";
$date += $ONE_WEEK;
}
答案 2 :(得分:0)
如果您在Perl中执行此操作,请再次查看Date::Calc。我是Date :: Calc的忠实粉丝,因为它的大型函数库使得这些类型的计算相对微不足道。对于这个问题中的问题,你可以用:
use Date::Calc qw(Weeks_in_Year Monday_of_Week);
$wks_in_2010 = Weeks_in_Year(2010);
for ($i = 1; $i <= $wks_in_2010; $i++) {
($mon_year, $mon_month, $mon_day) = Monday_of_Week($i, 2010);
print "$mon_month/$mon_day/$mon_year\n";
}
请记住,Tim Toady。