将两个datetime对象转换为每月datetime范围

时间:2018-11-26 14:25:24

标签: python python-3.x

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

2 个答案:

答案 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

答案 1 :(得分:0)

尝试一下

static void Main(string[] args)
{
    string test = GetCapitalizedInput();
    Console.WriteLine("Captured: " + test);
    Console.ReadLine();
}

static string GetCapitalizedInput()
{
    string input = "";
    while (true)
    {
        var keypress = Console.ReadKey(true); // suppress original output
        if (keypress.Key == ConsoleKey.Enter)
        {
            break;
        }
        string uppercased = keypress.KeyChar.ToString().ToUpper();
        input += uppercased;
        Console.Write(uppercased);
    }
    return input;
}