如何在Python中获取两个日期之间的所有日期(包括月份、日期和年份)?

11

情况: 我正尝试构建一个简单的方法,接受代表两个不同日期的两个不同整数。以20120525表示2012年5月25日,以20120627表示2012年6月26日为例。我希望这个方法返回表示两个日期参数之间所有天数的这些整数类型的列表。

问题: 我能否得到有关如何完成此操作以及如何处理每个月的28、29、30或31天的任何建议? 我认为可以通过使用10的幂的除法/取模运算提取数字作为整数,然后根据上述特定条件递增这些数字来完成此操作,但我觉得一定有更简单的方法。


3个回答

26

你不必重新发明轮子。只需将字符串解析为日期时间对象,让Python进行计算:

from dateutil import rrule
from datetime import datetime

a = '20120525'
b = '20120627'

for dt in rrule.rrule(rrule.DAILY,
                      dtstart=datetime.strptime(a, '%Y%m%d'),
                      until=datetime.strptime(b, '%Y%m%d')):
    print dt.strftime('%Y%m%d')

打印

20120525
20120526
20120527
…
20120625
20120626
20120627

14

这里提供了一种不使用rrule的替代方案:

import datetime

d1 = datetime.date(2015, 1, 1)
d2 = datetime.date(2015, 2, 6)
days = [d1 + datetime.timedelta(days=x) for x in range((d2-d1).days + 1)]

for day in days:
    print(day.strftime('%Y%m%d'))

输出:

20150101
20150102
20150103
<snip>
20150205
20150206

7

你可以使用pandas.date_range

import pandas

pd.date_range('2012-05-25', '2012-06-27', freq='D')

将产生以下结果:

DatetimeIndex(['2012-05-25', '2012-05-26', '2012-05-27', '2012-05-28',
               '2012-05-29', '2012-05-30', '2012-05-31', '2012-06-01',
               ...
               '2012-06-22', '2012-06-23', '2012-06-24', '2012-06-25',
               '2012-06-26', '2012-06-27'],
               dtype='datetime64[ns]', freq='D')

1
你的代码有错误。顶部应该写成 import pandas as pd - Haddock-san
1
但我不建议这样做,使用pandas库来实现一个超级简单的函数!!使用国家电网给手机充电! - emanuel sanga
显然,如果您已经在项目中使用Pandas,则此举仅有意义。如果您是这样做的话,那么它比上面的解决方案更简单。 - rth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接