将两个datetime对象转换为monthly datetime

2024-05-28 20:50:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个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)
]

我更喜欢这样做,不使用熊猫或numpy。你知道吗


Tags: 对象fromimportnumpydatetimedatestartlist
2条回答

试试这个

import datetime

def last_day_of_month(date):
    if date.month == 12:
        return date.replace(day=31)
    return date.replace(month=date.month+1, day=1) - datetime.timedelta(days=1)


def desired_output(start_date,end_date):
    curr_date = start_date
    desired_list = []
    desired_list.append(start_date)
    while curr_date<=end_date:
        if last_day_of_month(curr_date)>end_date:
            desired_list.append(end_date)
            break
        desired_list.append(last_day_of_month(curr_date))
        curr_date = last_day_of_month(curr_date) + datetime.timedelta(1)
        if curr_date<end_date:
            desired_list.append(curr_date)
        else:
            break
    return desired_list

print(desired_output(datetime.datetime(2018,9,6,0,0), datetime.datetime(2018,12,26,0,0)))

下面是如何获得两个范围之间的日期列表。您可以修改它以添加某些日期。你知道吗

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

相关问题 更多 >

    热门问题