2012-08-14 15 views
5

प्रारंभ तिथि को देखते हुए, मैं कैसे निर्धारित कर सकता हूं कि यह पाइथन के साथ कितने "व्यावसायिक सप्ताह" रहे हैं? मैं सिर्फ 7 तक विभाजित नहीं कर सकता क्योंकि इससे मुझे सही जवाब नहीं मिलेगा।पायथन गणना सप्ताह सप्ताह

एक उदाहरण 1 अगस्त 2012 की वर्तमान तिथि (13 अगस्त 2012) की प्रारंभ तिथि होगी, जो 3 सप्ताह का उत्पादन करेगी।

मैं मूल रूप से फुटबॉल सत्र की शुरुआत से पता लगाने की कोशिश कर रहा हूं, वर्तमान सप्ताह (पूर्णांक) क्या है।

मैंने पाइथन डेटाटाइम मॉड्यूल के साथ गड़बड़ करने की कोशिश की है, लेकिन इसका कोई फायदा नहीं हुआ है।

उत्तर

7

datetime.weekday, datetime.isoweekday का उपयोग कर सप्ताह की वर्तमान दिन मिलता है या अधिक पूर्ण datetime.isocalendar का उपयोग भी इस वर्ष के वर्तमान सप्ताह के प्राप्त करने के लिए करने के लिए और एक गठबंधन अंतर की गणना करने के ऑफसेट के रूप में उन का उपयोग करें।

def week_difference(start, end): 
    assert start <= end 
    start_year, start_week, start_dayofweek = start.isocalendar() 
    end_year, end_week, end_dayofweek = end.isocalendar() 

    return ((end_year - start_year) * 52) - start_week + end_week 
उपयोग के साथ इस तरह

:

import datetime as dt 
# same week 
In [1]: week_difference(dt.datetime(2012, 8, 1), dt.datetime(2012, 8, 1)) 
Out[1]: 0 

# your example (see note below) 
In [2]: week_difference(dt.datetime(2012, 8, 1), dt.datetime(2012, 8, 13)) 
Out[2]: 2 

# across years 
In [3]: week_difference(dt.datetime(2011, 8, 1), dt.datetime(2012, 8, 13)) 
Out[3]: 54 

# year boundary: second last business week of 2011, to first business week of 2012 
# which is the same business week as the last business week of 2011 
In [4]: week_difference(dt.datetime(2011, 12, 20), dt.datetime(2012, 1, 1)) 
Out[4]: 1 

In [5]: week_difference(dt.datetime(2011, 12, 18), dt.datetime(2012, 1, 1)) 
Out[5]: 2 

आप अपने क्या एक सप्ताह के अंतर का अर्थ चुना के आधार पर अपने सप्ताह उत्पादन के लिए 1 जोड़ सकते हैं

तो आप इस प्रकार का कार्य हो सकता है होना चाहिए।

+0

अंत में यदि आप/अन्य से छुटकारा पा सकते हैं। बस पहला कथन वापस करें - यह तब काम करता है जब साल एक ही – jterrace

+0

@jterrace आह है। वर्ष का हिस्सा उसी वर्ष शून्य हो जाता है। मैंने फ़ंक्शन टुकड़े टुकड़े का निर्माण किया और किसी भी तरह से यह ध्यान नहीं दिया। धन्यवाद। –

2

जब आप अपने datetime वस्तु मिलता है ...

import datetime 
today = datetime.datetime.now() 
start = datetime.datetime(2012, 9, 5) 

... आप अतिरिक्त isocalendar उपयोग कर सकते हैं ...

today.isocalendar() 
>>> (2012, 33, 1) 
start.isocalendar() 
>>> (2012, 36, 3) 

यह 3 टपल साल देता है, साल के सप्ताह , और सप्ताह के दिन। यदि आप केवल एक वर्ष की परवाह करते हैं, तो आप बस "वर्ष का सप्ताह" मान घटा सकते हैं (मैं यहां से एक हो सकता हूं ..)। अन्यथा, आपको शामिल वर्ष प्राप्त करने की आवश्यकता होगी।

0

एक-लाइनर:

datetime.date.isocalendar(datetime.date.today())[1] - datetime.date(2012, 8, 1).isocalendar()[1] + 1 
+0

दुर्भाग्यवश, यह वर्ष सीमाओं पर काम नहीं करता –

+0

बुरा नहीं, अच्छा काम करने लगता है। वैसे भी अगर इसे प्रारंभ तिथि से पहले नकारात्मक संख्याओं को वापस करने के लिए संशोधित किया जा सकता है? – imns

+0

@ प्रीते कुकरेती वर्ष सीमाओं से आपका क्या मतलब है? – imns

0

मेरे एक लाइनर साल सीमाओं में शामिल करने के लिए बढ़ाया:

start_date = datetime.date(2012, 8, 1) 
print ((datetime.date.isocalendar(datetime.date.today())[0]-datetime.date.isocalendar(start_date)[0])*52)+(datetime.date.isocalendar(datetime.date.today())[1]-datetime.date.isocalendar(start_date)[1])+1 
>>> 3 

नोट: यह समारोह अभी भी ऋणात्मक मानों वापस आ जाएगी अगर प्रारंभ_तिथि भविष्य में है (आज से)!

संबंधित मुद्दे