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

ima*_*yne 6 perl time date dayofweek

我试图在某一年找到一个日期落入的那一周.我有一堆文件需要分类到"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
Run Code Online (Sandbox Code Playgroud)

Pav*_*sov 8

您可以使用核心模块: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;
Run Code Online (Sandbox Code Playgroud)

OUTPUT

Date: 08/15/2012 ? Week: 33
Run Code Online (Sandbox Code Playgroud)


Dav*_*oss 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');
Run Code Online (Sandbox Code Playgroud)

运行它给出:

$ ./week 
week33-2012
Run Code Online (Sandbox Code Playgroud)

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