首页 > 解决方案 > 将两个日期时间对象转换为每月日期时间范围

问题描述

我有两个datetime对象,比如说start_dateend_date。我想做的是制作一个datetime对象列表。

>>> from datetime import datetime
>>> from dateutil.rrule import rrule, MONTHLY
>>> start_date = datetime(2018, 9, 6, 0,)
>>> end_date = datetime(2018, 11, 26, 23, 59, 59)
>>> list(rrule(MONTHLY, dtstart=start_date, until=end_date))
[datetime.datetime(2018, 9, 6, 0, 0), datetime.datetime(2018, 10, 6, 0, 0), datetime.datetime(2018, 11, 6, 0, 0)]

我可以用 来做到这一点rrule(),它正在从一个日期移动到另一个日期,但我希望它按月进行,并且还包括end_date,

[
    datetime.datetime(2018,9,6,0,0), 
    datetime.datetime(2018,9,30,23,59),
    datetime.datetime(2018,10,1,0,0),
    datetime.datetime(2018,10,31,23,59),
    datetime.datetime(2018,11,1,0,0),
    datetime.datetime(2018,11,26,23,59)
]

我宁愿在不使用 pandas 或 numpy 的情况下执行此操作。

标签: pythonpython-3.x

解决方案


这是获取两个范围之间的日期列表的方法。您可以对其进行修改以添加某些日期。

from datetime import datetime
from datetime import timedelta
import calendar
dates = []

start_date = datetime(2018, 9, 6, 0,)
end_date = datetime(2018, 10, 10, 0,)
index_date = start_date
while True:
    index_date = index_date
    dates.append(index_date)
    dayy = calendar.monthrange(index_date.year,index_date.month)
    index_date = index_date.replace(day= dayy[1])
    if  index_date > end_date:
        break
    dates.append(index_date)
    index_date = index_date + timedelta(days=1)
    if  index_date > end_date:
        break
print dates

推荐阅读