कृपया मेरे कोड में क्या गलत है:
import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d, "%Y-W%W")
print(r)
"2013-01-01 00:00:00" प्रदर्शित करें, धन्यवाद।
कृपया मेरे कोड में क्या गलत है:
import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d, "%Y-W%W")
print(r)
"2013-01-01 00:00:00" प्रदर्शित करें, धन्यवाद।
जवाबों:
एक तारीख बनाने के लिए एक सप्ताह की संख्या पर्याप्त नहीं है; आपको सप्ताह के एक दिन की भी आवश्यकता है। एक डिफ़ॉल्ट जोड़ें:
import datetime
d = "2013-W26"
r = datetime.datetime.strptime(d + '-1', "%Y-W%W-%w")
print(r)
-1
और -%w
पैटर्न पार्सर कि सप्ताह में सोमवार लेने के लिए कहता है। यह आउटपुट:
2013-07-01 00:00:00
%W
सप्ताह के पहले दिन के रूप में सोमवार का उपयोग करता है। जब आप अपना कार्यदिवस चुन सकते हैं, तो आपको अप्रत्याशित परिणाम मिल सकते हैं यदि आप इससे विचलित होते हैं।
प्रलेखन, फुटनोट 4 में व्यवहार strftime()
और strptime()
व्यवहार अनुभाग देखें :
जब
strptime()
विधि के साथ उपयोग किया जाता है ,%U
और%W
केवल सप्ताह के दिन और वर्ष निर्दिष्ट किए जाने पर गणना में उपयोग किया जाता है।
ध्यान दें, यदि आपका सप्ताह नंबर एक आईएसओ सप्ताह की तारीख है , तो आप %G-W%V-%u
इसके बजाय उपयोग करना चाहते हैं ! उन निर्देशों में अजगर 3.6 या नए की आवश्यकता होती है।
if d.endswith('-W0') and r.day == 7: raise ValueError('Invalid date string, No week 0 in {}'.format(r.year))
अन्य उत्तरों को पूरा करने के लिए - यदि आप आईएसओ सप्ताह संख्याओं का उपयोग कर रहे हैं , तो यह स्ट्रिंग उपयुक्त है (किसी दिए गए आईएसओ सप्ताह संख्या के सोमवार प्राप्त करने के लिए):
import datetime
d = '2013-W26'
r = datetime.datetime.strptime(d + '-1', '%G-W%V-%u')
print(r)
%G
, %V
, %u
के आईएसओ समकक्ष हैं %Y
, %W
, %w
, तो यह आउटपुट:
2013-06-24 00:00:00
पायथन में एवलाबे 3.6+; से डॉक्स ।
पायथन 3.8 में वहाँ काम है datetime.date.fromisocalendar
:
>>> from datetime import date
>>> date.fromisocalendar(2020, 1, 1) # (year, week, day of week)
datetime.date(2019, 12, 30, 0, 0)
पुराने पायथन संस्करणों (3.7-) में गणना इस बात का उपयोग कर सकती है कि datetime.date.isocalendar
किस सप्ताह से आईएसओ8601 अनुपालन सप्ताह का पता लगाया जा सकता है:
from datetime import date, timedelta
def monday_of_calenderweek(year, week):
first = date(year, 1, 1)
base = 1 if first.isocalendar()[1] == 1 else 8
return first + timedelta(days=base - first.isocalendar()[2] + 7 * (week - 1))
दोनों साथ काम भी करते हैं datetime.datetime
।
import datetime
res = datetime.datetime.strptime("2018 W30 w1", "%Y %W w%w")
print res
सप्ताह के दिन के रूप में 1 जोड़ने से वर्तमान सप्ताह की शुरुआत होगी। समयसीमा (दिन = 6) जोड़ने से आपको सप्ताह समाप्त हो जाएगा।
datetime.datetime(2018, 7, 23)
res = datetime.datetime.strptime("2018 W30 w1", "%Y W%W w%w")
यदि आपके पास सप्ताह की वार्षिक संख्या है, तो सप्ताह के पहले सप्ताह को वर्ष के पहले दिन में जोड़ें।
>>> import datetime
>>> from dateutil.relativedelta import relativedelta
>>> week = 40
>>> year = 2019
>>> date = datetime.date(year,1,1)+relativedelta(weeks=+week)
>>> date
datetime.date(2019, 10, 8)
यहां एक आसान कार्य है जिसमें शून्य-सप्ताह के साथ समस्या शामिल है।