Generating all dates within a given range in python
我有两个字符串变量中包含的日期格式为YYYY-MM-DD如下:
1 2 | date1 = '2011-05-03' date2 = '2011-05-10' |
我想写代码,在哪里所有的date1到date2日期范围。如何在Python中这样做吗?
日期可以相对于彼此就像数,你可以从日期和相关的datetime.timedelta数学对象。没有理由使用dateutil这里,没在理由iterations硬代码的数量在它的范围(9)。这真的成为类似于你如何处理(老式)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | >>> import datetime >>> date1 = '2011-05-03' >>> date2 = '2011-05-10' >>> start = datetime.datetime.strptime(date1, '%Y-%m-%d') >>> end = datetime.datetime.strptime(date2, '%Y-%m-%d') >>> step = datetime.timedelta(days=1) >>> while start <= end: ... print start.date() ... start += step ... 2011-05-03 2011-05-04 2011-05-05 2011-05-06 2011-05-07 2011-05-08 2011-05-09 2011-05-10 >>> |
大熊猫是一个适当的时间序列,在一般情况下,都是直接支持和蛛网膜下腔出血(SAH)的日期(日期范围和分析它的automagic)。
1 2 3 4 | import pandas as pd date1 = '2011-05-03' date2 = '2011-05-10' mydates = pd.date_range(date1, date2).tolist() |
它也有很多的选项,使生活更容易。例如,如果你想要,你就只会在weekdays,
国有企业pandas.pydata.org http://///timeseries.html熊猫-文档#产生稳定的测量的时间戳
1 2 3 4 5 6 7 8 9 10 | from dateutil import rrule, parser date1 = '2011-05-03' date2 = '2011-05-10' dates = list(rrule.rrule(rrule.DAILY, dtstart=parser.parse(date1), until=parser.parse(date2))) print dates |
由于dateutil标准库",你将有一个单独的软件包安装它。看到更多的细节关于文档格式(特别是
你已经是assuming日期的类,你可以使用
1 2 3 4 5 6 | from datetime import date start_date = date(2011, 5, 3) end_date = date(2011, 5, 10) [date.fromordinal(i) for i in range(start_date.toordinal(), end_date.toordinal())] |
结果是一
我喜欢这一个,因为它是直观的和它的一个字符串数组给日期。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import re import datetime def datetime_to_str_date(dt): return re.sub(r'\T.+$','', dt.isoformat()) start_date = datetime.datetime.strptime('2016-01-01', '%Y-%m-%d') end_date = datetime.datetime.today() num_of_days = (end_date - start_date).days date_list = map( datetime_to_str_date, [start_date + datetime.timedelta(days=x) for x in range(0, num_of_days)] ) |
1 2 3 4 5 6 | import time def dates_between(start, end): start_epoch = int(time.mktime(time.strptime(start,"%Y-%m-%d"))) end_epoch = int(time.mktime(time.strptime(end,"%Y-%m-%d"))) + 1 #include end return range(start_epoch, end_epoch, 86400) |
1 2 3 4 5 6 7 8 9 | import datetime real_date1 = datetime.date(*[int(x) for x in date1.split('-')]) real_date2 = datetime.date(*[int(x) for x in date2.split('-')]) date_range = real_date2 - real_date1 dates = list() for days in xrange(date_range.days): dates.append(real_date1 + datetime.timedelta(days)) print dates |
1 2 3 4 5 6 7 8 9 10 11 12 | >>> for a in range(9): ... print(datetime.date(2011, 05, 03) + datetime.timedelta(a)) ... 2011-05-03 2011-05-04 2011-05-05 2011-05-06 2011-05-07 2011-05-08 2011-05-09 2011-05-10 2011-05-11 |
我不太确定是否字符串解析的积分或是刚刚入门的方式将你的问题。如果是,请disregard oversimplified的答案