python中如何增加日期的月份格式

2024-04-19 14:31:23 发布

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

我试图通过用户输入的月数来设置月增量。例如,用户输入的日期是date = '2017-10-06',频率月是FreqMonth=3。你知道吗

因此,我的工作是从datedate=2017-10-06生成3个月的日期。结果是:2017-10-062017-11-062018-10-06。你知道吗

我试着这样做:

from datetime import datetime

date = '2017-09-06'
datelist = date.split('-')
FreqMonth = 3

for row in range(1,FreqMonth+1):
    if row > 1:
        datelist = newDate.split('-')

    newMonth = int(datelist[1])+1
    newDate = datetime.strptime(datelist[0] + '-' + str(newMonth) + '-' + datelist[2], '%Y-%m-%d')
    newDate = newDate.strftime('%Y-%m-%d')
    print newDate

输出为:

2017-10-06
2017-11-06
2017-12-06

它工作的很好,但是,如果我改变FreqMonth=5或者超过3个,我就得到了错误

ValueError: time data '2017-13-06' does not match format '%Y-%m-%d'

Traceback (most recent call last):
  File "DatePeriod.py", line 12, in <module>
    newDate = datetime.strptime(datelist[0] + '-' + str(newMonth) + '-' + datelist[2], '%Y-%m-%d')
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_strptime.py", line 325, in _strptime
    (data_string, format))

我希望的结果是:

2017-10-06
2017-11-06
2017-12-06
2018-01-06
2018-02-06

我怎样才能做到这一点?谢谢。你知道吗


Tags: 用户informatdatadatetimedatefilerow
2条回答

您可以使用dateutil扩展,更具体地说是relativedelta。你知道吗

你会得到这样的结果:

from datetime import datetime
from dateutil.relativedelta import relativedelta

date = datetime.strptime('2017-09-06', '%Y-%m-%d')
FreqMonth = 5

for month in range(1,FreqMonth+1):
    newDate = date + relativedelta(months=month)
    print(newDate)

试试这个。。。避免第三方扩展

from calendar import monthrange
from datetime import datetime, timedelta

offset = datetime(2017, 9, 1)

for i in range(29):
    offset += timedelta(days=monthrange(offset.year, offset.month)[1])
    print(str(offset))

相关问题 更多 >