增加日期月份的更好方法?

时间:2019-05-01 15:01:33

标签: python

我有一个日期作为整数,例如:import math def solve(): x = -1000 while x < 1001: if math.isclose((x**2 + 1), 4, rel_rol=1e-9): print("x = " + str(x)) x += 0.0000000000001 solve() 我想有一种方法可以给出开始日期,并且它会返回下一个日期,在此示例中:201806目前,我有以下解决方案:

201805

这是解决这个问题的一种好方法还是有一种简单的更好的方法?

4 个答案:

答案 0 :(得分:2)

使用relativedelta怎么办?

您的第一步将是安装软件包dateutil:

pip install dateutil

然后您将可以使用它:

import datetime
from dateutil.relativedelta import relativedelta
print(datetime.datetime.strptime(str(201805), "%Y%m") + relativedelta(months=1))

或字符串:

print((datetime.datetime.strptime(str(201805), "%Y%m") + relativedelta(months=1)).strftime("%Y%m"))

注意:relativedelta来自一个单独的名为“ dateutil”(here for the details)的软件包。显然,它包括添加月/天/年..而不创建自定义函数的好方法。

答案 1 :(得分:1)

您可以使用datetime.timedelta

from datetime import datetime, timedelta


def incrementDate(startdate):
    cur_date = datetime.strptime(str(startdate), '%Y%m')
    next_date = cur_date + timedelta(days=32)
    return datetime.strftime(next_date, '%Y%m')


print(incrementDate(201806))  # 201807
print(incrementDate(201812))  # 201901

答案 2 :(得分:1)

只是为了好玩,如果您输入的实际上是一个整数,代表4位数字的年份,再加上2位数字的月份,那么您就可以在不进行任何字符串或日期时间转换的情况下增加月份。

d = 201812

y, m = d // 100, d % 100
if m == 12:
    y += 1
    m = 1
else:
    m +=1

d = y * 100 + m

print(d)
# 201806

答案 3 :(得分:0)

通过replace()对象中的datetime方法,您可以从datetime对象中更新参数:

import datetime

today = datetime.datetime.now()

current_month = today.month
year = today.year

# Check for december
if current_month < 12:
  next_month = current_month + 1
else:
  next_month = 1
  year += 1

today= today.replace(month = next_month, year = year )

Reference

要加入您的功能:

import datetime

def increment_date(startdate):
  date = datetime.strptime(str(startdate), '%Y%m')
  current_month = date .month
  year = date .year

  # Check for december
  if current_month < 12:
    next_month = current_month + 1
  else:
    next_month = 1
    year += 1

  return date .replace(month = next_month, year = year )