2012-08-15 15 views
5

में दिए गए एक वर्ष का सप्ताह ढूंढें मैं एक निश्चित वर्ष में उस तारीख को ढूंढने की कोशिश कर रहा हूं, जिस दिन एक तिथि आती है। मेरे पास फाइलों का एक गुच्छा है जिसे "सप्ताह 1-2012" और "सप्ताह 34-2011" जैसे फ़ोल्डर में सॉर्ट करने की आवश्यकता है। मैंने खोज करने की कोशिश की लेकिन बहुत सारे परिणाम वास्तव में मदद नहीं कर रहे हैं क्योंकि मैं वर्तमान में perl v5.6.1 का उपयोग कर रहा हूं, सुपर पुराना और मैं कोई मॉड्यूल डाउनलोड नहीं कर सकता। मुझे यह लिंक भी मिला (How do I calculate the week number given a date?) ब्याज की लेकिन यह सोच रहा था कि मैं साल और सप्ताह का दिन आसानी से कैसे प्राप्त करूंगा। महीने प्राप्त करने के बारे में सोच रहा था, और साल में दिन का पता लगाने के लिए उचित मात्रा में जोड़ना था। किसी भी सहायता की सराहना की जाएगी। साल प्रारूप मैं देख रहा हूँ का एक उदाहरणमिमी/डीडी/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

आप कोर मॉड्यूल का उपयोग कर सकते है: POSIX और Time::Local

करने के लिए अपने तारीख 1.parse (सेकंड, मिनट, घंटे, mday, माह, वर्ष)

सेकंड के लिए अपनी तिथि 2.Convert

(युग)

3.Use समारोह 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; 

आउटपुट

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

हाँ !!! आपने बस मेरी समस्या हल की है। मैं इस कारण का उल्लेख करना भूल गया कि मैं मॉड्यूल इंस्टॉल क्यों नहीं कर सकता क्योंकि यह काम कंप्यूटर मुझे यह नहीं देगा, और मुझे इस प्रोग्राम को किसी अन्य पीसी पर ले जाना होगा जिसमें आवश्यक मॉड्यूल नहीं हो सकते हैं। अनेक अनेक धन्यवाद! – imakeitrayne

+0

आपका स्वागत है :) –

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

+0

फिर: यदि कुछ और नहीं है, तो आप 'डेटटाइम' से प्रासंगिक कोड कॉपी और उपयोग कर सकते हैं। यह खुला स्रोत है। इसका मतलब है कि आप वास्तव में ** स्रोत को देख सकते हैं **। –

3

पर्ल 5.6.1 अप्रैल 2001 से तारीखें। कोई भी आपके जीवन को उपयोग करने के लिए आधुनिक उपकरण नहीं देकर उससे अधिक कठिन बना रहा है। मेरा सुझाव है कि उस समस्या को ठीक करने में कुछ समय व्यतीत करना उचित है।

यदि आपके पास पर्ल 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

+1

और इस बीच आप निम्न उपकरण के साथ काम करने में खुश हैं? ठीक। यह तुम्हारा जीवन है जिसे आप बर्बाद कर रहे हैं :-) –