在 Python 中将年份添加到日期
Add year(s) to a date in Python
使用该datetime.replace()
方法将年份添加到日期,例如
start_date.replace(year=start_date.year + years)
. 该replace
方法将返回具有相同属性的新日期,但年份除外,该日期将根据提供的值进行更新。
主程序
from datetime import datetime, date def add_years(start_date, years): try: return start_date.replace(year=start_date.year + years) except ValueError: # 👇️ preseve calendar day (if Feb 29th doesn't exist, set to 28th) return start_date.replace(year=start_date.year + years, day=28) # ✅ add years to a date my_str = '09-14-2023' # 👉️ (mm-dd-yyyy) date_1 = datetime.strptime(my_str, '%m-%d-%Y') print(date_1) # 👉️ 2023-09-14 00:00:00 result_1 = add_years(date_1, 3) print(result_1) # 👉️ 2026-09-14 00:00:00 # ----------------------------------------------- # ✅ add years to current date current_date = datetime.today() print(current_date) # 👉️ 2022-06-20 14:45:55.418010 result_2 = add_years(current_date, 2) print(result_2) # 👉️ 2024-06-20 14:45:55.418010 # ----------------------------------------------- # ✅ using date instead of datetime date_3 = date(2023, 9, 7) print(date_3) # 👉️ 2023-09-07 result_3 = add_years(date_3, 5) print(result_3) # 👉️ 2028-09-07 # ----------------------------------------------- # ✅ add years to current date (using date instead of datetime) date_4 = date.today() print(date_4) # 👉️ 2022-06-20 result_4 = add_years(date_4, 6) print(result_4) # 👉️ 2028-06-20
该add_years
函数获取我们要添加的日期和年数,并返回更新后的日期。
datetime.replace方法返回一个具有相同属性的
对象,但关键字参数提供的属性除外。
在示例中,我们返回一个新日期,其中月份和日期相同但年份已更新。
第一个示例使用
datetime.strptime()
方法获取与提供的日期字符串对应的日期时间对象,并根据指定格式进行解析。
一旦我们有了datetime
对象,我们就可以使用replace()
方法来替换年份。
主程序
from datetime import datetime, date def add_years(start_date, years): try: return start_date.replace(year=start_date.year + years) except ValueError: # 👇️ preserve calendar day (if Feb 29th doesn't exist, set to 28th) return start_date.replace(year=start_date.year + years, day=28) # ✅ add years to a date my_str = '09-14-2023' # 👉️ (mm-dd-yyyy) date_1 = datetime.strptime(my_str, '%m-%d-%Y') print(date_1) # 👉️ 2023-09-14 00:00:00 result_1 = add_years(date_1, 3) print(result_1) # 👉️ 2026-09-14 00:00:00
示例中的日期字符串格式为mm-dd-yyyy
.
如果您有一个以不同方式格式化的日期字符串,请使用
此文档表
来查找您应该作为第二个参数传递给该
strptime()
方法的格式代码。
由于我们保留了月份的月份和日期,因此我们必须知道二月在闰年有 29 天,在非闰年有 28 天。
当前日期可能是 2 月 29 日,添加 X 年返回非闰年,其中 2 月 29 日不是有效日期。
在这种情况下,我们更新年份并将该月的日期设置为 28 日。
主程序
def add_years(start_date, years): try: return start_date.replace(year=start_date.year + years) except ValueError: # 👇️ preserve calendar day (if Feb 29th doesn't exist, set to 28th) return start_date.replace(year=start_date.year + years, day=28)
如果当年不存在 2 月 29 日,另一种方法是将日期设置为 3 月 1 日。
主程序
from datetime import datetime, date def add_years(start_date, years): try: return start_date.replace(year=start_date.year + years) except ValueError: # 👇️ preserve calendar day (if Feb 29th doesn't exist # set to March 1st) return start_date + ( date(start_date.year + years, 1, 1) - date(start_date.year, 1, 1) ) # ✅ add years to a date my_str = '02-29-2024' # 👉️ (mm-dd-yyyy) date_1 = datetime.strptime(my_str, '%m-%d-%Y') print(date_1) # 👉️ 2024-02-29 00:00:00 result_1 = add_years(date_1, 3) print(result_1) # 👉️ 2027-03-01 00:00:00
第二个示例将年份添加到当前日期。
主程序
from datetime import datetime, date def add_years(start_date, years): try: return start_date.replace(year=start_date.year + years) except ValueError: return start_date.replace(year=start_date.year + years, day=28) current_date = datetime.today() print(current_date) # 👉️ 2022-06-20 14:45:55.418010 result_2 = add_years(current_date, 2) print(result_2) # 👉️ 2024-06-20 14:45:55.418010
datetime.today()方法返回当前
本地日期时间。
第三个示例在将年份添加到日期时使用date()
类而不是类。datetime
主程序
from datetime import date def add_years(start_date, years): try: return start_date.replace(year=start_date.year + years) except ValueError: return start_date.replace(year=start_date.year + years, day=28) date_3 = date(2023, 9, 7) print(date_3) # 👉️ 2023-09-07 result_3 = add_years(date_3, 5) print(result_3) # 👉️ 2028-09-07
第四个示例将年份添加到date
表示当前日期的对象。
主程序
from datetime import datetime, date def add_years(start_date, years): try: return start_date.replace(year=start_date.year + years) except ValueError: return start_date.replace(year=start_date.year + years, day=28) # ✅ add years to current date (using date instead of datetime) date_4 = date.today() print(date_4) # 👉️ 2022-06-20 result_4 = add_years(date_4, 6) print(result_4) # 👉️ 2028-06-20
date.today
方法返回一个表示当前本地日期的对象。date