在Python中获得一个月的一年和一个月

时间:2014-05-23 11:07:39

标签: python date datetime

我想写一个函数:

  • 接受参数:数月(int)
  • 返回从现在到输入月数之间的timedelta的year(int)和month(int)。

示例:我们在2014年5月,所以:

  • myfunc(0)应该返回(2014,5)
  • myfunc(12)应该返回(2013,5)
  • myfunc(5)应该返回(2013,12)

有很多关于日期时间和日历的文档,以至于我有点迷失了。谢谢你的帮助。

注意:我需要一个准确的方法来做,而不是近似:)

4 个答案:

答案 0 :(得分:1)

import datetime

def myfunc(num_of_months):
    today = datetime.date.today()
    num_of_months = today.year * 12 + today.month - 1 - num_of_months
    year = num_of_months / 12
    month = num_of_months % 12 + 1
    return year, month

答案 1 :(得分:0)

from time import strftime, localtime, time
from calendar import monthrange
def uberdate(n):
    if n == 0: return strftime('%Y, %m').split(', ')
    month = int(strftime('%m'))
    aDay = 60*60*24
    offset = aDay # One day to start off with
    for i in range(0, n):
        while int(strftime('%m', localtime(time()-offset))) == month:
            offset = offset+aDay
        month = int(strftime('%m', localtime(time()-offset)))
    return strftime('%Y, %m', localtime(time()-offset)).split(', ')

print(uberdate(5))

这会产生:

[torxed@archie ~]$ python test.py 
[2013, 12]

不知道为什么我得到了downvote,但引用OP:

  

示例:我们在2014年5月,所以:

     

myfunc(5)应该返回(2013,12)等。

这就是我的功能所产生的......
反馈人,在随意下载之前给予它。

答案 2 :(得分:-1)

已编辑(更改了月份,以提高准确度)

现在您可以输入负数月份并过去日期 我认为这就是你要找的东西

import datetime
from dateutil.relativedelta import * 

def calculate_date(number_months):
    time_now = datetime.datetime.now()  # Get now time
    time_future = time_now + relativedelta(months=+number_months)   # Add months
    return time_future.year,time_future.month  #Return year,month

我已经在我的计算机中测试了这个脚本并且运行得很好

>>> calculate_data(5)
(2014, 10)

答案 3 :(得分:-1)

您可以使用python-dateutil模块。 https://pypi.python.org/pypi/python-dateutil

def return_year_date(delta_month):
    from datetime import date
    from dateutil.relativedelta import relativedelta

    new_date = date.today() + relativedelta(months= -delta_month)

    return new_date.year, new_date.month