Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何每月生成2006到2010年的数据时间_Python - Fatal编程技术网

Python 如何每月生成2006到2010年的数据时间

Python 如何每月生成2006到2010年的数据时间,python,Python,我知道如何生成datetime对象 datetime.datetime2006,1,1,0,0 但是如何从2006/1/1到2010/1/1每月生成一系列datatime对象呢 比如 for dt in [datetime.datetime(2006, 1, 1, 0, 0): datetime.datetime(2010, 1, 1, 0, 0)]: print(dt) 预期结果 2006, 1, 1, 0, 0 2006, 2, 1, 0, 0 2006, 3, 1, 0, 0 .

我知道如何生成datetime对象

datetime.datetime2006,1,1,0,0

但是如何从2006/1/1到2010/1/1每月生成一系列datatime对象呢

比如

for dt in [datetime.datetime(2006, 1, 1, 0, 0): datetime.datetime(2010, 1, 1, 0, 0)]:
    print(dt)
预期结果 2006, 1, 1, 0, 0 2006, 2, 1, 0, 0 2006, 3, 1, 0, 0 ... 2010, 1, 1, 0, 0 更新

如图所示,在datetime库中增加月份是一个令人惊讶的挑战。但是,如果同时使用dateutil库,则会更容易:

from dateutil.relativedelta import relativedelta
print [datetime.datetime(2006, 1, 1, 0, 0) + relativedelta(months=i) for i in range(48)]

链接问题也有一些解决方案,可以在不使用dateutil的情况下执行此操作,但它们实际上更麻烦。

您可以使用简单的循环:

print [datetime.datetime(y,m,1) for y in range(2006,2010) for m in range(1,13)]
有,

使用@Backtrack提到的calendar.monthrange生成一个生成每月日期时间的生成器。 日历和日期时间在标准库中提供

将为您提供以下结果:

datetime.datetime(2006, 1, 1, 0, 0)
datetime.datetime(2006, 2, 1, 0, 0)
datetime.datetime(2006, 3, 1, 0, 0)
datetime.datetime(2006, 4, 1, 0, 0)
datetime.datetime(2006, 5, 1, 0, 0)
datetime.datetime(2006, 6, 1, 0, 0)
datetime.datetime(2006, 7, 1, 0, 0)
...
datetime.datetime(2010, 1, 1, 0, 0)

嵌套循环?一年一个月一天需要if语句
print [datetime.datetime(y,m,1) for y in range(2006,2010) for m in range(1,13)]
from datetime import datetime
from dateutil.rrule import rrule, MONTHLY
for dt in rrule(MONTHLY, dtstart=datetime(2006, 1, 1), until=datetime(2010, 1, 1)):
     print(dt)
import datetime
from calendar import monthrange

def months(start_datetime, end_datetime):
    current_datetime = start_datetime
    while current_datetime <= end_datetime:
        yield current_datetime
        _, days_in_month = monthrange(current_datetime.year, current_datetime.month)
        current_datetime += datetime.timedelta(days=days_in_month) 
start = datetime.datetime(2006, 1, 1)
end = datetime.datetime(2010, 1, 1)
for month_datetime in months(start, end):
    print(month_datetime)
datetime.datetime(2006, 1, 1, 0, 0)
datetime.datetime(2006, 2, 1, 0, 0)
datetime.datetime(2006, 3, 1, 0, 0)
datetime.datetime(2006, 4, 1, 0, 0)
datetime.datetime(2006, 5, 1, 0, 0)
datetime.datetime(2006, 6, 1, 0, 0)
datetime.datetime(2006, 7, 1, 0, 0)
...
datetime.datetime(2010, 1, 1, 0, 0)