दिलचस्प पोस्ट
क्या यह एक एंकर लिंक के लिए Alt टैग का उपयोग करना सही है? पीएलएसक्यूएल जेडीबीसी: आखिरी पंक्ति आईडी कैसे प्राप्त करें? एक फ्लोट बनाओ केवल दो दशमलव स्थान दिखाएं मैं NumLock, CapsLock और ScrollLock की स्थिति को नेट में कैसे पा सकता हूं? क्या अनंत जनरेटर के लिए कोई अभिव्यक्ति है? VM और PyCharm के साथ कस्टम PYTHONPATH को कॉन्फ़िगर कैसे करें? क्या stdin flush stdout से पढ़ता है? सीएसएस पहचानकर्ताओं के लिए अनुमत वर्ण पैरामीलेटेड एसक्यूएल क्वेरी को वैरिएबल में डालें और फिर पायथन में कैसे निष्पादित करें? अनुरोध शरीर के साथ HTTP प्राप्त करें इनो सेटअप घटकों पर लंबे विवरण .NET में NameValueCollection में किसी क्वेरी स्ट्रिंग को कैसे विश्लेषित करें मैं Visual Studio compile त्रुटि को कैसे ठीक कर सकता हूँ, "प्रोसेसर आर्किटेक्चर के बीच बेमेल"? क्या रिवर्स इंजीनियरिंग से एंड्रॉइड ऐप की रक्षा करना वास्तव में असंभव है? ब्राउज़रों में मूसीव्हील की गति को सामान्य करना

पायथन में कई तिथियां बनाना

मैं तिथियों की एक सूची बनाना चाहता हूं, जो आज से शुरू हो रहा है, और एक मनमाना संख्या को वापस लौटना चाहता हूं, कहते हैं, मेरे उदाहरण में 100 दिन क्या इस से बेहतर तरीका है?

import datetime a = datetime.datetime.today() numdays = 100 dateList = [] for x in range (0, numdays): dateList.append(a - datetime.timedelta(days = x)) print dateList 

वेब के समाधान से एकत्रित समाधान "पायथन में कई तिथियां बनाना"

मामूली बेहतर …

 base = datetime.datetime.today() date_list = [base - datetime.timedelta(days=x) for x in range(0, numdays)] 

Pandas सामान्य रूप में समय श्रृंखला के लिए महान है, और तिथि सीमाओं के लिए प्रत्यक्ष समर्थन है

 import pandas as pd datelist = pd.date_range(pd.datetime.today(), periods=100).tolist() 

जीवन में आसान बनाने के लिए इसमें बहुत से विकल्प हैं उदाहरण के लिए यदि आप केवल सप्ताह के दिन चाहते थे, तो आप सिर्फ bdate_range में स्वैप bdate_range

http://pandas.pydata.org/pandas-docs/stable/timeseries.html#generating-ranges-of-timestamps देखें

इसके अलावा यह पूरी तरह से पीटाज़ समयक्षेत्र का समर्थन करता है और आसानी से वसंत / शरद ऋतु डीएसटी बदलावों को बढ़ा सकता है।

आप जेनरेटर फ़ंक्शन लिख सकते हैं जो आज से शुरू होने वाली तारीख वस्तुएं देता है:

 import datetime def date_generator(): from_date = datetime.datetime.today() while True: yield from_date from_date = from_date - datetime.timedelta(days=1) 

यह जनरेटर आज की तारीखों की शुरुआत करता है और एक समय में एक दिन पीछे पीछे हो जाता है। पहले तीन तिथियां कैसे लेंगी यह है:

 >>> import itertools >>> dates = itertools.islice(date_generator(), 3) >>> list(dates) [datetime.datetime(2009, 6, 14, 19, 12, 21, 703890), datetime.datetime(2009, 6, 13, 19, 12, 21, 703890), datetime.datetime(2009, 6, 12, 19, 12, 21, 703890)] 

एक पाश या सूची समझ के इस दृष्टिकोण का लाभ यह है कि आप चाहते हैं जितनी बार वापस जा सकते हैं।

संपादित करें

फ़ंक्शन के बजाय जनरेटर अभिव्यक्ति का उपयोग करके एक अधिक कॉम्पैक्ट संस्करण:

 date_generator = (datetime.datetime.today() - datetime.timedelta(days=i) for i in itertools.count()) 

उपयोग:

 >>> dates = itertools.islice(date_generator, 3) >>> list(dates) [datetime.datetime(2009, 6, 15, 1, 32, 37, 286765), datetime.datetime(2009, 6, 14, 1, 32, 37, 286836), datetime.datetime(2009, 6, 13, 1, 32, 37, 286859)] 

निर्दिष्ट प्रारंभ और समाप्ति तिथि (समय और स्थान की जटिलता के लिए अनुकूलित) के बीच दिनांक की सीमाएं प्राप्त करें:

 import datetime start = datetime.datetime.strptime("21-06-2014", "%d-%m-%Y") end = datetime.datetime.strptime("07-07-2014", "%d-%m-%Y") date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end-start).days)] for date in date_generated: print date.strftime("%d-%m-%Y") 

आप इसे आसान बनाने के लिए दिन का क्रम भी इस्तेमाल कर सकते हैं:

 def date_range(start_date, end_date): for ordinal in range(start_date.toordinal(), end_date.toordinal()): yield datetime.date.fromordinal(ordinal) 

या जैसा कि टिप्पणियों में सुझाव दिया गया है, आप इस प्रकार एक सूची बना सकते हैं:

 date_range = [ datetime.date.fromordinal(ordinal) for ordinal in range( start_date.toordinal(), end_date.toordinal(), ) ] 

हाँ, पहिया को रेइनवेट करें …. बस फ़ोरम की खोज करें और आप ऐसा कुछ पाएंगे:

 from dateutil import rrule from datetime import datetime list(rrule.rrule(rrule.DAILY,count=100,dtstart=datetime.now())) 

इस प्रश्न के शीर्षक से मुझे range() तरह कुछ ढूंढने की उम्मीद थी, जो मुझे दो तिथियों को निर्दिष्ट करने और बीच में सभी तिथियों के साथ एक सूची बनाते हैं। इस तरह से उन दो तिथियों के बीच दिनों की संख्या की गणना करने की आवश्यकता नहीं है, अगर किसी को पहले से यह नहीं पता है

तो थोड़ा बंद विषय होने के जोखिम के साथ, यह एक लाइनर नौकरी करता है:

 import datetime start_date = datetime.date(2011, 01, 01) end_date = datetime.date(2014, 01, 01) dates_2011_2013 = [ start_date + datetime.timedelta(n) for n in range(int ((end_date - start_date).days))] 

इस उत्तर के लिए सभी क्रेडिट!

मुझे कुछ देर का उत्तर पता है, लेकिन मुझे एक ही समस्या थी और मैंने तय किया कि अजगर का आंतरिक रेंज फ़ंक्शंस इस संबंध में कुछ कमी थी, इसलिए मैंने इसे मेरे एक उपयोगी मॉड्यूल में ओवरराइड कर दिया है।

 from __builtin__ import range as _range from datetime import datetime, timedelta def range(*args): if len(args) != 3: return _range(*args) start, stop, step = args if start < stop: cmp = lambda a, b: a < b inc = lambda a: a + step else: cmp = lambda a, b: a > b inc = lambda a: a - step output = [start] while cmp(start, stop): start = inc(start) output.append(start) return output print range(datetime(2011, 5, 1), datetime(2011, 10, 1), timedelta(days=30)) 

यहाँ मेरे द्वारा अपने कोड से बनाया गया सार है, यह मददगार हो सकता है (मुझे पता है कि सवाल बहुत पुराना है, लेकिन अन्य इसका उपयोग कर सकते हैं)

https://gist.github.com/2287345

(नीचे एक ही बात)

 import datetime from time import mktime def convert_date_to_datetime(date_object): date_tuple = date_object.timetuple() date_timestamp = mktime(date_tuple) return datetime.datetime.fromtimestamp(date_timestamp) def date_range(how_many=7): for x in range(0, how_many): some_date = datetime.datetime.today() - datetime.timedelta(days=x) some_datetime = convert_date_to_datetime(some_date.date()) yield some_datetime def pick_two_dates(how_many=7): a = b = convert_date_to_datetime(datetime.datetime.now().date()) for each_date in date_range(how_many): b = a a = each_date if a == b: continue yield b, a 

सप्ताह के दिनों की सूची प्राप्त करने के लिए यहां एक लिप लाइनर है, यह अजगर है 3. जो भी हो, आसानी से संशोधित किया जा सकता है, अंत में इंट अतीत में दिनों की संख्या है जिसे आप चाहते हैं।

 python -c "import sys,datetime; print('\n'.join([(datetime.datetime.today() - datetime.timedelta(days=x)).strftime(\"%Y/%m/%d\") for x in range(0,int(sys.argv[1])) if (datetime.datetime.today() - datetime.timedelta(days=x)).isoweekday()<6]))" 10 

एक शुरुआत (या, अंत) तिथि प्रदान करने के लिए यहां एक प्रकार है

 python -c "import sys,datetime; print('\n'.join([(datetime.datetime.strptime(sys.argv[1],\"%Y/%m/%d\") - datetime.timedelta(days=x)).strftime(\"%Y/%m/%d \") for x in range(0,int(sys.argv[2])) if (datetime.datetime.today() - datetime.timedelta(days=x)).isoweekday()<6]))" 2015/12/30 10 

यहां मनमाने प्रारंभ और समाप्ति तिथियों के लिए एक प्रकार है। ऐसा नहीं है कि यह बहुत ही कुशल नहीं है, लेकिन एक पाश स्क्रिप्ट में लूप में डाल करने के लिए अच्छा है:

 python -c "import sys,datetime; print('\n'.join([(datetime.datetime.strptime(sys.argv[1],\"%Y/%m/%d\") + datetime.timedelta(days=x)).strftime(\"%Y/%m/%d\") for x in range(0,int((datetime.datetime.strptime(sys.argv[2], \"%Y/%m/%d\") - datetime.datetime.strptime(sys.argv[1], \"%Y/%m/%d\")).days)) if (datetime.datetime.strptime(sys.argv[1], \"%Y/%m/%d\") + datetime.timedelta(days=x)).isoweekday()<6]))" 2015/12/15 2015/12/30 

Matplotlib संबंधित

 from matplotlib.dates import drange import datetime base = datetime.date.today() end = base + datetime.timedelta(days=100) delta = datetime.timedelta(days=1) l = drange(base, end, delta) 

यहां एस लोट के उत्तर से थोड़ा अलग जवाब दिया गया है जो कि दो तिथियों के बीच की तारीखों की सूची देता है और start end । नीचे दिए गए उदाहरण में, 2017 से आज तक की शुरुआत से

 start = datetime.datetime(2017,1,1) end = datetime.datetime.today() daterange = [start + datetime.timedelta(days=x) for x in range(0, (end-start).days)] 
 from datetime import datetime, timedelta from dateutil import parser def getDateRange(begin, end): """ """ beginDate = parser.parse(begin) endDate = parser.parse(end) delta = endDate-beginDate numdays = delta.days + 1 dayList = [datetime.strftime(beginDate + timedelta(days=x), '%Y%m%d') for x in range(0, numdays)] return dayList 
 import datetime def date_generator(): cur = base = datetime.date.today() end = base + datetime.timedelta(days=100) delta = datetime.timedelta(days=1) while(end>base): base = base+delta print base date_generator()