我试图在某一年找到日期所在的那一周。我有一堆文件需要分类到“week1-2012”和“week34-2011”等文件夹中。我尝试搜索但很多结果并没有真正帮助,因为我目前正在使用perl v5.6.1,超级旧,我无法下载任何模块。我也发现了这个感兴趣的链接(How do I calculate the week number given a date?),但我想知道如何轻松地获得一年和一周的日期。想到这个月,并添加适当的天数来找出一年中的那一天。任何帮助,将不胜感激。我正在寻找的年份格式的一个例子是
//year 2012
S M T W R F S
1 2 3 <-- week #1
4 5 6 7 8 9 10 <-- week #2 //came from the link
//dec year 2011
S M T W T F S
27 28 29 31 <-- week #52 or 53, not to sure the actual week
答案 0 :(得分:7)
您可以使用核心模块:POSIX
和Time::Local
1.将你的日期分为(秒,分钟,小时,日,月,年)
2.将您的日期转换为秒(纪元)
3.使用函数strftime从当前日期获取一周
use strict;
use Time::Local;
use POSIX qw(strftime);
my $date = '08/15/2012';
my ($month, $day, $year) = split '/', $date;
my $epoch = timelocal( 0, 0, 0, $day, $month - 1, $year - 1900 );
my $week = strftime( "%U", localtime( $epoch ) );
printf "Date: %s № Week: %s\n", $date, $week;
<强>输出强>
Date: 08/15/2012 № Week: 33
答案 1 :(得分:3)
这是另一种解决方案,使用DateTime
:
use strict;
use warnings;
use DateTime;
my $dt=DateTime->now(time_zone=>"local");
print $dt->week_number . "\n";
输出当然是:
33
修改: Of course you can download modules!如果不出意外,您可以复制并使用DateTime
中的相关代码。
答案 2 :(得分:3)
Perl 5.6.1的日期是2001年4月。有人通过不给你现代工具使你的生活变得更加困难。我建议花一些时间来解决这个问题。
如果你有Perl 5.10或更高版本,那么它将包含Time::Piece模块。而你的问题将变得微不足道。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Time::Piece;
my $date = '08/15/2012';
my $dt = Time::Piece->strptime($date, '%m/%d/%Y');
say $dt->strftime('week%W-%Y');
运行它给出:
$ ./week
week33-2012
这将周计算为周一至周日,而不是周日。