Python 为任何日期(甚至闰年)添加天数
在任何日期添加天数,甚至在二月和闰年(如果有的话)也添加天数 这是我的日期:2020-07-08T07:03:08Z 我需要在上述日期的基础上增加天数,如果有其他条件的话Python 为任何日期(甚至闰年)添加天数,python,python-3.x,date,datetime,Python,Python 3.x,Date,Datetime,在任何日期添加天数,甚至在二月和闰年(如果有的话)也添加天数 这是我的日期:2020-07-08T07:03:08Z 我需要在上述日期的基础上增加天数,如果有其他条件的话 if(month): # i need to increment 30/31 days as per the month have next_upcoming_date = 2020-08-07T07:03:08Z if(year): # i need to increment 365/366(whe
if(month):
# i need to increment 30/31 days as per the month have
next_upcoming_date = 2020-08-07T07:03:08Z
if(year):
# i need to increment 365/366(when leap year) as per the year
next_upcoming_date = 2021-07-07T07:03:08Z
示例:如果是31
如果订阅条款为每月25.99美元,并且订户在7月31日星期四注册。订户的账单如下所示:
Thursday, July 31 = $25.99 USD
Saturday, August 31 = $25.99 USD
Wednesday, October 1= $25.99 USD
Saturday, November 1= $25.99 USD
and so on
Tuesday, December 30 = $25.99 USD
Friday, January 30 = $25.99 USD
Sunday, March 1= $25.99 USD
Wednesday, April 1= $25.99USD
and so on
示例:如果30
如果认购条款为每月25.99美元,且认购人在12月30日星期二注册,则认购人的账单如下:
Thursday, July 31 = $25.99 USD
Saturday, August 31 = $25.99 USD
Wednesday, October 1= $25.99 USD
Saturday, November 1= $25.99 USD
and so on
Tuesday, December 30 = $25.99 USD
Friday, January 30 = $25.99 USD
Sunday, March 1= $25.99 USD
Wednesday, April 1= $25.99USD
and so on
请建议我如何做到这一点。该软件包提供了一种方便的方法:
from datetime import datetime
from dateutil.relativedelta import relativedelta
# convert string to datetime object:
s = '2020-07-08T07:03:08Z'
dt = datetime.fromisoformat(s.replace('Z', '+00:00'))
# datetime.datetime(2020, 7, 8, 7, 3, 8, tzinfo=datetime.timezone.utc)
# add a month:
dt_plus_month = dt + relativedelta(months=1)
# datetime.datetime(2020, 8, 8, 7, 3, 8, tzinfo=datetime.timezone.utc)
dt_plus_year = dt + relativedelta(years=1)
# datetime.datetime(2021, 7, 8, 7, 3, 8, tzinfo=datetime.timezone.utc)
这一年你能做什么 来自重新导入拆分的
a=“2020-08-07T07:03:08Z”
解析=拆分(“-”,a)
如果(已解析[0]%4)==0:
打印(“闰年!”)
其他:
打印(“非闰年):)
可能有点复杂,但它是纯python
在这个月里,你可以做:
from re import split
a="2020-08-07T07:03:08Z"
parsed = split("-", a)
if parsed[1] in [01, 03, 05, 07, 08, 10, 12]:
print("31 month!")
else:
print("30 month ): .")
这里有一个建议,在OP更新问题后,如何获得所需的输出。它与原来的版本有很大的不同,所以我决定给它一个新的答案
from datetime import datetime
from calendar import monthrange
from dateutil.relativedelta import relativedelta
s = '2020-07-31T07:03:08Z'
dt = datetime.fromisoformat(s.replace('Z', '+00:00'))
for _ in range(6):
print(dt)
# first, add a month
dt += relativedelta(months=1)
# then analyse the result if it falls on a month with less than 31 days:
mr = monthrange(dt.year, dt.month)
if mr[1] < 31 and dt.day != 1: # also check if day==1, leave it at that if so.
dt += relativedelta(days=1)
# 2020-07-31 07:03:08+00:00
# 2020-08-31 07:03:08+00:00
# 2020-10-01 07:03:08+00:00
# 2020-11-01 07:03:08+00:00
# 2020-12-01 07:03:08+00:00
# 2021-01-01 07:03:08+00:00
s = '2020-12-30T07:03:08Z'
dt = datetime.fromisoformat(s.replace('Z', '+00:00'))
for _ in range(6):
print(dt)
dt += relativedelta(months=1)
mr = monthrange(dt.year, dt.month)
if mr[1] < 31 and dt.day != 1:
dt += relativedelta(days=1)
# 2020-12-30 07:03:08+00:00
# 2021-01-30 07:03:08+00:00
# 2021-03-01 07:03:08+00:00
# 2021-04-01 07:03:08+00:00
# 2021-05-01 07:03:08+00:00
# 2021-06-01 07:03:08+00:00
从日期时间导入日期时间
从日历导入monthrange
从dateutil.relativedelta导入relativedelta
s='2020-07-31T07:03:08Z'
dt=日期时间。从isoformat(s.replace('Z','+00:00'))
对于范围(6)内的uu:
打印(dt)
#首先,加上一个月
dt+=相对寿命(月=1)
#然后分析结果,如果它落在少于31天的一个月内:
mr=monthrange(dt.年,dt.月)
如果mr[1]<31且dt.day!=1:#同时检查day==1,如果是,则保持该状态。
dt+=relativedelta(天数=1)
# 2020-07-31 07:03:08+00:00
# 2020-08-31 07:03:08+00:00
# 2020-10-01 07:03:08+00:00
# 2020-11-01 07:03:08+00:00
# 2020-12-01 07:03:08+00:00
# 2021-01-01 07:03:08+00:00
s='2020-12-30T07:03:08Z'
dt=日期时间。从isoformat(s.replace('Z','+00:00'))
对于范围(6)内的uu:
打印(dt)
dt+=相对寿命(月=1)
mr=monthrange(dt.年,dt.月)
如果mr[1]<31且dt.day!=1:
dt+=relativedelta(天数=1)
# 2020-12-30 07:03:08+00:00
# 2021-01-30 07:03:08+00:00
# 2021-03-01 07:03:08+00:00
# 2021-04-01 07:03:08+00:00
# 2021-05-01 07:03:08+00:00
# 2021-06-01 07:03:08+00:00
您是否知道datetime
模块中的timedelta
?你可以简单地说将时间增量添加到日期中对不起。。我是新国际展览局的:(.请原谅,您是否可以提供更多的代码,以便我们可以看到您已经完成的工作的更大范围?您正在尝试做什么还不是很清楚。相关:新日期的目标是什么?您是否只是尝试添加一个月或一年,并说明月份中不同的天数?您可能应该添加更多的示例开始日期和预期结果。此relativedelta库也将负责闰年?@Anonymous:是的,检查文档。将执行此操作并将批准:)对于此日期s='2020-01-31T07:03:08Z'和aam获得o/p为2020-02-29 07:03:08+00:00-->月。但我想要3月1日。当“s”在31号,日期应该是本月的1号。如果初始日期是29号或30号,则应该是次年2月的1号。请建议我如何实现此目标