2012-08-15 67 views
5

我正在尝试查找某个日期在某一年发生的一周。我有一堆文件需要分类到像“week1-2012”和“week34-2011”这样的文件夹中。我尝试搜索,但很多结果并没有真正帮助,因为我目前使用的是perl v5.6.1,超级老,我无法下载任何模块。我也发现这个链接(How do I calculate the week number given a date?),但想知道如何轻松获得一年中的一周。正在考虑获取这个月份,并添加适当的天数以找出当年的一天。任何帮助,将不胜感激。今年格式我找的一个例子是查找以mm/dd/yyyy表示的日期的一周

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

回答

7

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

1.parse您的日期(秒,分钟,小时,MDAY,月,年)

2.convert您的日期秒(时代)

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; 

OUTPUT

Date: 08/15/2012 № Week: 33 
+0

是的!!!你刚刚解决了我的问题。我忘了提及为什么我无法安装模块的原因是因为这台工作计算机不会给我,我需要将这个程序运行到另一台可能没有所需模块的电脑。万分感谢! – imakeitrayne 2012-08-15 20:05:37

+0

不客气:) – 2012-08-15 22:29:48

3

下面是一个替代的解决方案,采用DateTime

use strict; 
use warnings; 
use DateTime; 

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

输出是当然:

33 

编辑:Of courseyou can download modules!如果没有否则,您可以复制并使用DateTime中的相关代码。

+0

看来我没有这个版本的perl的日期时间...但感谢您的帮助... – imakeitrayne 2012-08-15 20:06:50

+0

再次:如果没有别的,你可以复制和使用'DateTime'的相关代码。它是开源的。这意味着你可以**看看源**。 – 2012-08-15 20:21:58

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 

这计数一周周一至周日,而不是太阳周六

+0

是的,但即时通讯目前只使用一台临时电脑,直到我的常规电脑完成技术支持。 – imakeitrayne 2012-08-17 15:43:22

+1

在此期间,您很乐意使用劣质工具?好。这是你的生活浪费:-) – 2012-08-17 15:49:59