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)
您可以使用核心模块: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;
Run Code Online (Sandbox Code Playgroud)
OUTPUT
Date: 08/15/2012 ? Week: 33
Run Code Online (Sandbox Code Playgroud)
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)
这将一周视为周一至周日,而不是周日至周六。