【问题标题】:How to Print next year from current year in Python如何在 Python 中从当年打印明年
【发布时间】:2012-06-27 17:18:22
【问题描述】:

如果当前年份是在 python 中使用最简单的代码给出的,我如何打印下一年,可能在一行中使用 datetime 模块。

【问题讨论】:

  • 我将从以下代码中得到 '2005' 'time.strftime('%Y', time.strptime('2005-11-11', '%Y-%m-%d' ))'..现在我需要的是得到'2006'而不需要对这段代码做太多改动
  • time.strptime('2005-11-11', '%Y-%m-%d').tm_year + 1

标签: python datetime


【解决方案1】:

日期和日期时间对象都有一个year 属性,它是一个数字。只需添加 1:

>>> from datetime import date
>>> print date.today().year + 1
2013

如果变量中有当前年份,直接加1即可,不用纠结datetime模块:

>>> year = 2012
>>> print year + 1
2013

如果您在字符串中包含日期,只需选择代表年份的 4 位数字并将其传递给int

>>> date = '2012-06-26'
>>> print int(date[:4]) + 1
2013

年份算术非常简单,将其设为整数并加 1。没有比这更简单的了。

但是,如果您使用的是整个日期,并且您需要相同的日期但一年后,请使用组件创建一个新的 date 对象,其中年份增加一:

>>> today = date.today()
>>> print date(today.year + 1, today.month, today.day)
2013-06-26

或者您可以使用.replace 函数,该函数返回您指定的字段已更改的副本:

>>> print today.replace(year=today.year + 1)
2013-06-26

请注意,当today 是闰年的 2 月 29 日时,这可能会有点棘手。因此,绝对的、故障安全的正确方法是:

def nextyear(dt):
   try:
       return dt.replace(year=dt.year+1)
   except ValueError:
       # February 29th in a leap year
       # Add 365 days instead to arrive at March 1st
       return dt + timedelta(days=365)

【讨论】:

  • .replace 函数无法可靠运行。 d = date(2012, 2, 29) d.replace(year=d.year+1) 抛出 ValueError: day is out of range for month 并且您之前构建新日期对象的选项也不会处理这种情况。
  • @Duncan:不错;那么问题来了,一年后的 2 月 29 日是什么日子? 3 月 1 日?
  • 通常是 3 月 1 日,但也可能有例外。如果您在 2 月 29 日取出 1 年期债券,那么我认为它将在次年的 3 月 1 日到期。当然,一旦你开始计算金钱,它实际上会在第一个工作日到期,即跳过周末和银行假期至少一年。
  • @Duncan:对于大多数情况而言,3 月 1 日可能“足够正确”;更新为在 ValueError 上使用 try-except,因为闰日是相对罕见的情况。
  • @Duncan: date(2012, 2, 29) + relativedelta(years=+1) is 2013-02-28(当月的最后一天转换为当月的最后一天)。
【解决方案2】:

这是另一种简单的方法...

import datetime

x = datetime.datetime.now()

print(x.year+1)

【讨论】:

  • 问题是关于在给定当前年份的情况下获得下一个年。
猜你喜欢
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 2017-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
相关资源
最近更新 更多