2012-08-15 12 views
5

Belirli bir yılda bir tarihin düştüğü haftayı bulmaya çalışıyorum. "Week1-2012" ve "week34-2011" gibi klasörlere ayrılması gereken bir sürü dosyam var. Arama yapmayı denedim, ancak pek çok sonuç gerçekten yardımcı olmadı çünkü şu anda süper eski perl v5.6.1 kullanıyorum ve herhangi bir modülü indiremiyorum. Ayrıca bu bağlantıyı (How do I calculate the week number given a date?) buldum ama yıl ve haftanın günlerini nasıl kolayca alacağımı merak ediyorum. Ayı almayı ve yılın gününü öğrenmek için uygun miktarda gün eklemeyi düşünüyordum. Herhangi bir yardım takdir edilecektir. Aradığım yıl biçiminde bir örneği Sen çekirdek modüllerini kullanabilirTarih olarak verilen bir yılın haftasını bul aa/gg/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 

cevap

7

geçerli: POSIX ve sizin bugüne 1.parse

Time::Local (sn, dak, saat, mday, ay, yıl) saniye için tarih 2.Convert

(dönem)

3.Use işlevi strftime geçerli tarihten hafta almak için

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; 

ÇIKIŞ

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

EVET !!! Sorunumu çözdün. Modülleri kurmamın nedenini söylemeyi unutmuşum çünkü bu çalışma bilgisayarı bana vermeyecek ve bu programı gerekli modüllere sahip olmayan başka bir bilgisayara taşımalıyım. Teşekkürler bir ton! – imakeitrayne

+0

hosgeldiniz :) –

3

İşte alternatif bir çözüm DateTime kullanarak, var:

use strict; 
use warnings; 
use DateTime; 

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

çıkışı, elbette:

33 

Düzenleme: hiçbir şey olursaOf courseyou can download modules!başka bir deyişle, ilgili kodu DateTime'dan kopyalayıp kullanabilirsiniz.

+0

Bu perl'in bu sürümünde datetime sahip degilim ... ama yardım için teşekkürler ... – imakeitrayne

+0

Tekrar: Başka bir şey yoksa, ilgili kodu "DateTime" dan kopyalayıp kullanabilirsiniz. Açık kaynak. Yani aslında ** kaynağa bakabilirsiniz **. –

3

Perl 5.6.1 Nisan 2001 tarihinden itibaren. Birisi, kullanımınıza modern araçlar vermeyerek hayatınızı zorlaştırmaktan çok daha zorluyor. Bu sorunu düzeltmek için biraz zaman harcamaya değer olduğunu tavsiye ederim.

Perl 5.10 veya daha üst bir sürüme sahipseniz, Time::Piece modülünü içerir. Ve senin sorunun önemsiz olacak.

#!/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'); 

Koşu o verir:

$ ./week 
week33-2012 

Bu Mon-Sun, Sun-Sat olarak hafta sayar.

+0

Evet, ancak şu an normal cihazım teknik destek tarafından düzeltilene kadar yalnızca geçici bir bilgisayar kullanıyorum. – imakeitrayne

+1

Ve bu arada inferior aletler ile çalışmaktan memnun musunuz? Tamam. Hayatın boşa harcıyorsun :-) –

İlgili konular