2012-08-15 35 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