2010-07-12 24 views
18

वर्ष का दिन, मैं वर्ष को बैश का उपयोग करके कैसे प्राप्त कर सकता हूं?वर्ष के दिन से वर्ष का सप्ताह प्राप्त करें

+0

यद्यपि आप यहां पर इस बात के लिए एक जवाब मिल सकता है मुझे लगता है कि इस सवाल का हमारे बहन साइट stackoverflow.com के लिए अधिक उपयुक्त हो सकता:

यहां सप्ताह नंबरिंग सिस्टम का एक प्रदर्शन है। – Chopper3

+1

न केवल यह प्रोग्रामिंग प्रश्न है बल्कि मुझे संदिग्ध रूप से होमवर्क की तरह दिखता है। संयोग से, इसके लिए बैश का उपयोग करना नौकरी के लिए गलत उपकरण का उपयोग करने का एक अच्छा उदाहरण है। –

+1

+1 दिनांक गणना के लिए बैश का उपयोग न करें - आधुनिक लिनक्स/यूनिक्स मशीन डिफ़ॉल्ट रूप से एक अद्यतित पायथन या पर्ल के साथ शिप करेंगे। नौकरी के लिए सबसे अच्छा उपकरण का प्रयोग करें। –

उत्तर

33

date आदेश का उपयोग करके आप "% वी" प्रारूप पैरामीटर का उपयोग कर साल के सप्ताह के दिखा सकते हैं:

/bin/date +%V 

आप date बता पार्स करने और उपयोग करने के बजाय मौजूदा एक के एक कस्टम समय फ़ॉर्मेट करने के लिए कर सकते हैं "-d" पैरामीटर:

/bin/date -d "20100215" 

फिर, दो विकल्प मिश्रण, आप एक कस्टम तिथि के लिए एक कस्टम प्रारूप लागू कर सकते हैं:

/bin/date -d "20100215" +%V 
+1

बहुत खराब आपका समाधान केवल तारीख के जीएनयू संस्करण के साथ काम करता है। तिथि का सोलारिस संस्करण-डी स्विच और% वी प्रारूप विकल्प का समर्थन नहीं करता है। – basvdlei

+6

सप्ताह के आधार पर '% यू' (रविवार की शुरुआत, 00-53) या'% डब्ल्यू' (सोमवार की शुरुआत, 00-53) ('% V' (आईएसओ, सोमवार की शुरुआत, 01-53) के अतिरिक्त) आपके द्वारा उपयोग की जाने वाली संख्या प्रणाली। –

+0

तिथि का सोलारिस संस्करण, जो समर्थन करने में असमर्थ है-डी को तारीख के sunfreeware.com संस्करण को बदलने के साथ हल किया जा सकता है। – conandor

3

आप जीएनयू date उपयोग कर रहे हैं तो आप इस तरह के सापेक्ष दिनांक का उपयोग कर सकते हैं:

$ doy=193 
$ date -d "Jan 1 +$((doy -1)) days" +%U 
28 

यह आपको एक बहुत ही साधारण जवाब देना होगा, लेकिन date पर निर्भर नहीं करता:

$ echo $((doy/7)) 

जो सप्ताह के दिन पर कोई ध्यान नहीं देता है।

$ printf "\nDate\t\tDOW\tDOY\t%%U %%V %%W\n"; \ 
for d in "Jan "{1..4}" 2010" \ 
"Dec "{25..31}" 2010" \ 
"Jan "{1..4}" 2011"; \ 
do printf "%s\t" "$d"; \ 
date -d "$d" +"%a%t%j%t%U %V %W"; \ 
done 

Date   DOW  DOY  %U %V %W 
Jan 1 2010  Fri  001  00 53 00 
Jan 2 2010  Sat  002  00 53 00 
Jan 3 2010  Sun  003  01 53 00 
Jan 4 2010  Mon  004  01 01 01 
Dec 25 2010  Sat  359  51 51 51 
Dec 26 2010  Sun  360  52 51 51 
Dec 27 2010  Mon  361  52 52 52 
Dec 28 2010  Tue  362  52 52 52 
Dec 29 2010  Wed  363  52 52 52 
Dec 30 2010  Thu  364  52 52 52 
Dec 31 2010  Fri  365  52 52 52 
Jan 1 2011  Sat  001  00 52 00 
Jan 2 2011  Sun  002  01 52 00 
Jan 3 2011  Mon  003  01 01 01 
Jan 4 2011  Tue  004  01 01 01 
संबंधित मुद्दे