找到一年中的一周给出日期,单位为mm / dd / yyyy

时间:2012-08-15 18:31:57

标签: perl date time dayofweek

我试图在某一年找到日期所在的那一周。我有一堆文件需要分类到“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

3 个答案:

答案 0 :(得分:7)

您可以使用核心模块:POSIXTime::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

这将周计算为周一至周日,而不是周日。