如果给定的日期是本月的最后一天,如何增加月数?

2024-06-17 18:03:44 发布

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

我正在用Python构建一个天气预报Web Scraper。我对约会有点问题。我有这样的预测天数。我需要像2019-08-29这样格式化到目前为止的格式,但是如果是本月的最后一天,我不知道如何增加月份。你知道吗

我尝试将当前月份加入到我的日期中,但如果我加入,则所有日期都与该月份相同,如: [2019-08-29, 2019-08-30, 2019-08-31,2019-08-01,2019-08-02,2019-08-03]而不是[2019-08-29, 2019-08-30, 2019-08-31,2019-09-01,2019-09-02,2019-09-03]。你知道吗

所以我需要你的帮助,以检查在循环,如果一天是本月的最后一天,然后增加一个月。你知道吗

import pandas as pd
import datetime as dt
from calendar import monthrange

days = [29,30,31,1,2,3,4]
cy = int(dt.datetime.today().year)
cm = int(dt.datetime.today().month)
last_day = monthrange(cy,cm)[1]



for i,day in enumerate(days):
    while (days[i] - days[i+1]) == -1:
        i+=1
        print(cm)
    if (days[i] - days[i+1]) != -1:
        print(cm)
        cm += 1
    print(cm)

Tags: importwebtodaydatetimeasdtcmdays
2条回答

使用内置日期时间模块

from datetime import date, timedelta
day0 = date.today()
for td in range(7):
    myday = day0 + timedelta(days=td)
    print(myday.strftime('%Y-%m-%d'))

输出

2019-08-30
2019-08-31
2019-09-01
2019-09-02
2019-09-03
2019-09-04
2019-09-05

使用第三方pendulum的两个备选方案,但是您也可以使用任何其他流行的第三方软件包

import pendulum
d0 = pendulum.now()
dates = [d0.add(days=d).strftime('%Y-%m-%d') for d in range(7)]
print(dates)

start = pendulum.now()
end = start.add(days=6)
for d in pendulum.period(start, end):
    print(d.strftime('%Y-%m-%d'))

输出

['2019-08-30', '2019-08-31', '2019-09-01', '2019-09-02', '2019-09-03', '2019-09-04', '2019-09-05']
2019-08-30
2019-08-31
2019-09-01
2019-09-02
2019-09-03
2019-09-04
2019-09-05

因此,如果您所要做的只是让for循环以月为单位递增,那么这应该是可行的:

days = [29, 30, 31, 1, 2, 3, 4]
cy = int(dt.datetime.today().year)
cm = int(dt.datetime.today().month)
last_day = monthrange(cy,cm)[1]

for i, day in enumerate(days):
    last_day = monthrange(cy, cm)[1]
    print(f"{cy}-{cm}-{day}")
    if cm == 12 and day == last_day:
        cy += 1
        cm = 1
    elif day == last_day:
        cm += 1

输出:

2019-8-29
2019-8-30
2019-8-31
2019-9-1
2019-9-2
2019-9-3
2019-9-4

不过,此方法容易出错,因此需要添加错误处理。例如,如果当前月份是11月,并且您在天内得到31,那么您将得到不正确的下一次迭代的日期(2019-11-30, 2019-12-31, 2020-1-1)。这只在days正确并且没有任何错误的情况下才有效。你知道吗

像其他人建议的那样,预先进行一些预处理,然后计算出一系列的日期可能更安全。你知道吗

相关问题 更多 >