2016-01-20 45 views
1

所以這個程序我有工作。我可以從開始日期到結束日期列出日期。但是它有很多代碼。我想知道是否有更簡單的方法來做同樣的事情。任何可以給予的幫助表示讚賞。如何使用Python獲取日期列表?

start_date = 20151002 # < 10-02-2015 
dates = [] 
end_date = 20170304 # 03-04-2017 
def nextday(): 
    global start_date 
    while start_date < end_date: 
     start_date += 1 
     next_date = str(start_date) 
     dates.append(start_date) 
     #so with the date the first 4 characters is the year 
     #the next two charcters is the month 
     #The last two charcters is the day. 
     #str(start_date)[4:] should actually be the month and the day. 
     if str(next_date)[4] + str(next_date)[5] == "10" and str(next_date)[6] + str(next_date)[7] == "31":#< there are only 31 days in oct - 10 
      date_list = [next_date[0], next_date[1], next_date[2], next_date[3], "1", "1", "0", "1"] 
      print "Nov" 
      new_month = "" 
      for dat in date_list: 
       new_month += dat 
      start_date = int(new_month) 
     if str(next_date)[4] + str(next_date)[5] == "11" and str(next_date)[6] + str(next_date)[7] == "30": #< there are only 30 days in nov - 11 
      date_list = [next_date[0], next_date[1], next_date[2], next_date[3], "1", "2", "0", "1"] 
      print "Dec" 
      new_month = "" 
      for dat in date_list: 
       new_month += dat 
      start_date = int(new_month) 
     if str(next_date)[4] + str(next_date)[5] == "12" and str(next_date)[6] + str(next_date)[7] == "31": #< there are only 31 days in dec - 12 
      #^ This month will also change the year. 
      date_list = [next_date[0], next_date[1], next_date[2], str(int(next_date[3]) + 1), "0","1","0","1"] 
      print "Jan", "New year" 
      new_month = "" 
      for dat in date_list: 
       new_month += dat 
      start_date = int(new_month) 
     if str(next_date)[4] + str(next_date)[5] == "01" and str(next_date)[6] + str(next_date)[7] == "31": #< there are only 31 days in jan - 01 
      #^ This month will also change the year. 
      date_list = [next_date[0], next_date[1], next_date[2], next_date[3], "0","2","0","1"] 
      print "Feb" 
      new_month = "" 
      for dat in date_list: 
       new_month += dat 
      start_date = int(new_month) 
     if int(next_date[0]+next_date[1]+next_date[2]+next_date[3]) % 4 == 0: 
      if str(next_date)[4] + str(next_date)[5] == "02" and str(next_date)[6] + str(next_date)[7] == "29": #< there are only 29 days in LEAP YEAR feb - 02 
       #^ This month will also change the year. 
       date_list = [next_date[0], next_date[1], next_date[2], next_date[3], "0","3","0","1"] 
       print "Mar" 
       new_month = "" 
       for dat in date_list: ####################LEAP YEAR################# 
        new_month += dat 
       start_date = int(new_month) 
     else: 
      if str(next_date)[4] + str(next_date)[5] == "02" and str(next_date)[6] + str(next_date)[7] == "28": #< there are only 28 days in feb - 02 
       #^ This month will also change the year. 
       date_list = [next_date[0], next_date[1], next_date[2], next_date[3], "0","3","0","1"] 
       print "Mar" 
       new_month = "" 
       for dat in date_list: 
        new_month += dat 
       start_date = int(new_month) 
     if str(next_date)[4] + str(next_date)[5] == "03" and str(next_date)[6] + str(next_date)[7] == "31": #< there are only 29 days in mar - 03 
      #^ This month will also change the year. 
      date_list = [next_date[0], next_date[1], next_date[2], next_date[3], "0","4","0","1"] 
      print "Apr" 
      new_month = "" 
      for dat in date_list: 
       new_month += dat 
      start_date = int(new_month) 
     if str(next_date)[4] + str(next_date)[5] == "04" and str(next_date)[6] + str(next_date)[7] == "30": #< there are only 30 days in apr - 04 
      #^ This month will also change the year. 
      date_list = [next_date[0], next_date[1], next_date[2], next_date[3], "0","5","0","1"] 
      print "May" 
      new_month = "" 
      for dat in date_list: 
       new_month += dat 
      start_date = int(new_month) 
     if str(next_date)[4] + str(next_date)[5] == "05" and str(next_date)[6] + str(next_date)[7] == "31": #< there are only 31 days in may - 05 
      #^ This month will also change the year. 
      date_list = [next_date[0], next_date[1], next_date[2], next_date[3], "0","6","0","1"] 
      print "Jun" 
      new_month = "" 
      for dat in date_list: 
       new_month += dat 
      start_date = int(new_month) 
     if str(next_date)[4] + str(next_date)[5] == "06" and str(next_date)[6] + str(next_date)[7] == "30": #< there are only 30 days in jun - 0 
      #^ This month will also change the year. 
      date_list = [next_date[0], next_date[1], next_date[2], next_date[3], "0","7","0","1"] 
      print "Jul" 
      new_month = "" 
      for dat in date_list: 
       new_month += dat 
      start_date = int(new_month) 
     if str(next_date)[4] + str(next_date)[5] == "07" and str(next_date)[6] + str(next_date)[7] == "31": #< there are only 31 days in jul - 0 
      #^ This month will also change the year. 
      date_list = [next_date[0], next_date[1], next_date[2], next_date[3], "0","8","0","1"] 
      print "Aug" 
      new_month = "" 
      for dat in date_list: 
       new_month += dat 
      start_date = int(new_month) 
     if str(next_date)[4] + str(next_date)[5] == "08" and str(next_date)[6] + str(next_date)[7] == "31": #< there are only 31 days in aug - 0 
      #^ This month will also change the year. 
      date_list = [next_date[0], next_date[1], next_date[2], next_date[3], "0","9","0","1"] 
      print "Sept" 
      new_month = "" 
      for dat in date_list: 
       new_month += dat 
      start_date = int(new_month) 
     if str(next_date)[4] + str(next_date)[5] == "09" and str(next_date)[6] + str(next_date)[7] == "30": #< there are only 31 days in sep - 0 
      #^ This month will also change the year. 
      date_list = [next_date[0], next_date[1], next_date[2], next_date[3], "1","0","0","1"] 
      print "Oct" 
      new_month = "" 
      for dat in date_list: 
       new_month += dat 
      start_date = int(new_month) 
     print start_date 
nextday() 
print dates 
+1

看一看在[日期時間模塊(HTTPS ://docs.python.org/2/library/datetime.html)。 –

+0

您也可以使用優秀且輕量級的python-dateutil庫及其rrule.rrule方法。但datetime + timedelta綽綽有餘。 –

回答

2

您需要的所有功能都已包含在標準庫中。

import datetime 
start = datetime.date(2015, 10, 2) 
end = datetime.date(2017, 3, 4) 
current = start 
dates = [] 
while current <= end: 
    dates.append(str(current)) 
    current += datetime.timedelta(days=1) 
1

您可以使用datetimetimedelta通過從START_DATE到END_DATE每天進行迭代。

這裏是你如何以一天遞增起始日期:

from datetime import date 
from datetime import timedelta 

one_day = timedelta(days=1) 
start_date = date(2015, 10, 2) 

print(start_date) 
print(start_date + one_day) 

那麼你將只是遍歷,直到你到了END_DATE。

1

使用datetime模塊:

import datetime 

day = datetime.timedelta(days=1) 
start = datetime.datetime(2015, 10, 3) 
end = datetime.datetime(2017, 3, 5) 
times = [start + day * x for x in range((end - start).days)] 

創建:

>>> times 
[datetime.datetime(2015, 10, 3, 0, 0), 
datetime.datetime(2015, 10, 4, 0, 0), 

... 

datetime.datetime(2017, 3, 3, 0, 0), 
datetime.datetime(2017, 3, 4, 0, 0)] 
2

我希望,它會幫助你:

import datetime 

start_date = datetime.datetime(2015, 10, 02) 
end_date = datetime.datetime(2017, 03, 04) 
def nextday(): 
    global start_date 
    start_date += datetime.timedelta(days=1) 
    return min(start_date, end_date) 

>>> start_date 
datetime.datetime(2015, 10, 2, 0, 0) 
>>> nextday() 
datetime.datetime(2015, 10, 3, 0, 0) 
>>> nextday() 
datetime.datetime(2015, 10, 4, 0, 0) 
>>> nextday() 
datetime.datetime(2015, 10, 5, 0, 0) 
>>> nextday() 
datetime.datetime(2015, 10, 6, 0, 0) 
相關問題