7

我试图找到某个日期所在的星期,在某一年。我有一堆文件需要分类到“week1-2012”和“week34-2011”等文件夹中。我尝试搜索,但很多结果并没有真正帮助,因为我目前使用的是 perl v5.6.1,超级旧,我无法下载任何模块。我还发现了这个链接(如何计算给定日期的周数?),但我想知道如何轻松获得一年中的某一天和一周。正在考虑获取月份,并添加适当的天数以找出一年中的哪一天。任何帮助,将不胜感激。我正在寻找的年份格式的一个例子是

//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
4

3 回答 3

8

您可以使用核心模块:POSIXTime::Local

1.将您的日期解析为 (sec, min, hour, mday, month, year)

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
于 2012-08-15T18:53:33.210 回答
6

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

这将一周视为周一至周日,而不是周日至周六。

于 2012-08-16T09:32:39.950 回答
4

这是一个替代解决方案,使用DateTime

use strict;
use warnings;
use DateTime;

my $dt=DateTime->now(time_zone=>"local");
print $dt->week_number . "\n";

输出当然是:

33

编辑: 当然 你可以下载模块!如果不出意外,您可以从DateTime.

于 2012-08-15T18:57:47.530 回答