2013-03-05 125 views
1

是否有一种特殊的方法来派生这个或我们必须创建循环?这个函数的参数实际上是(year,num_of_days)。但我不知道如何从中获得数月。 这是我到目前为止(不完整),但它没有考虑到不同月份的日子。有没有更简单的方法来解决这个问题?提前致谢!如何在Python3中使用datetime将日期转换为月份?

def daynum_to_date(year : int, daynum : int) -> datetime.date: 
    '''Return the date corresponding to the year and the day number, daynum, 
    within the year. 

    Hint: datetime handles leap years for you, so don't think about them. 

    Examples: 
    >>> daynum_to_date(2011, 1) # first day of the year 
    datetime.date(2011, 1, 1) 
    >>> daynum_to_date(2011, 70) 
    datetime.date(2011, 3, 11) 
    >>> daynum_to_date(2012, 70) 
    datetime.date(2012, 3, 10) 
    ''' 

    import calendar 
    totalmonths = 0 
    i = 1 
    while i < 13: 
     month_days = calendar.monthrange(year,i)[1] 
     months = daynum//int(month_days) 
     if months in range(2): 
      days = daynum % int(month_days) 
      totalmonths = totalmonths + 1 

     else: 
      daynum = daynum - int(month_days) 
      totalmonths = totalmonths + 1 
      i = i + 1 
     return datetime.date(year, totalmonths, days) 

回答

0

就快成功了:

import calendar 
import datetime 

def daynum_to_date(year : int, daynum : int) -> datetime.date: 
    month = 1 
    day = daynum 
    while month < 13: 
     month_days = calendar.monthrange(year, month)[1] 
     if day <= month_days: 
      return datetime.date(year, month, day) 
     day -= month_days 
     month += 1 
    raise ValueError('{} does not have {} days'.format(year, daynum)) 

这给:

>>> daynum_to_date(2012, 366) 
datetime.date(2012, 12, 31) 
>>> daynum_to_date(2012, 367) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 10, in daynum_to_date 
ValueError: 2012 does not have 367 days 
>>> daynum_to_date(2012, 70) 
datetime.date(2012, 3, 10) 
>>> daynum_to_date(2011, 70) 
datetime.date(2011, 3, 11) 
>>> daynum_to_date(2012, 1) 
datetime.date(2012, 1, 1) 
相关问题