如何从今年开始在Python中打印明年

Alc*_*777 38 python datetime

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

Mar*_*ers 105

date和datetime对象都有一个year属性,这是一个数字.只需添加1:

>>> from datetime import date
>>> print date.today().year + 1
2013
Run Code Online (Sandbox Code Playgroud)

如果你有一个变量的当前年份,只需直接添加1,不需要打扰日期时间模块:

>>> year = 2012
>>> print year + 1
2013
Run Code Online (Sandbox Code Playgroud)

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

>>> date = '2012-06-26'
>>> print int(date[:4]) + 1
2013
Run Code Online (Sandbox Code Playgroud)

年算术非常简单,使它成为一个整数,只需加1.它没有那么简单.

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

>>> today = date.today()
>>> print date(today.year + 1, today.month, today.day)
2013-06-26
Run Code Online (Sandbox Code Playgroud)

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

>>> print today.replace(year=today.year + 1)
2013-06-26
Run Code Online (Sandbox Code Playgroud)

请注意,这可能会在today2月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)
Run Code Online (Sandbox Code Playgroud)

  • `.replace`函数无法可靠地工作.`d = date(2012,2,29)``d.replace(year = d.year + 1)`throws`ValueError:day超出了month的范围`,你以前的选项也没有用于构建新的date对象处理这种情况. (2认同)
  • 通常是3月1日,但可能有例外.如果你在2月29日拿出1年保证金,我认为它将在次年3月1日到期.当然,一旦你进行了金钱计算,它实际上将在第一个工作日成熟,至少在周末和银行假日跳过一年. (2认同)