将月,日,年添加到日期

时间:2015-03-01 22:22:56

标签: python

我需要编写一个类语法,以便能够将日期,月份...添加到日期中。 目前我只有这个:

class Date:
    def __init__(self, day=1, month=1, year=2015):
        self.day = day
        self.mon = month
        self.year = year
    def printUS(self):
        print self.mon , "/" , self.day , "/" , self.year
    def printUK(self):
        print self.day , "." , self.mon , "." , str(self.year)[2:]
    def AddDay(self,n=1):

我很困惑如何编写最后一个函数,以正确的方式为每个月添加天数,以免超过月份或年份的日期。 我宁愿不使用任何其他模块,因为我根本没有学过它们。 我没有超过一个月的基本编程经验,而且从未有过以前的经验。

5 个答案:

答案 0 :(得分:1)

你有一个良好的开端。我建议调查模运算符。在阅读this question后计算给定月份的天数后,您可以使用它来增加月数。如果您有任何问题,请随时评论。

答案 1 :(得分:0)

为此,您可以创建一个确定给定月份天数的函数;即num_days(月,年) - > int numOfDays

然后你可以简单地将方法更改为Date类,add_days(self,n = 1),以检查num_days(self.mon,self.year)的值,然后如果self.day + n大于该值,增加self.mon并从n中减去该值,使用差值作为self.day的新值。

真正的诀窍是创建num_days函数,因为在闰年2月将有不同的天数。我建议查看闰年的完整技术定义,因为它比检查它是否可以被4整除更复杂。

答案 2 :(得分:0)

为了保持简单,您可以创建一个每月长度的数组。

monthlength = [31, 28, 31, 30, 31, ...]

然后检查添加日功能中的月份。所以最终看起来像这样:

monthlength = [31, 28, 31, 30, 31, ...]

def AddDay(self, n=1):
    if self.day + n > self.monthlength[self.month]:
         self.day = self.day + n - self.monthlength[self.month]
         self.month = self.month + 1
         if self.month == 13:
              self.month = 1
              self.year = self.year + 1
              if self.year%4 == 0:
                  self.monthlength[1] = 29
              else:
                  self.monthlength[1] = 28

    else:
         self.day = self.day + n

答案 3 :(得分:0)

试试这个。


class Date(object):
    def __init__(self, day=1, month=1, year=2015):
        self.day = day
        self.mon = month
        self.year = year
    def __str__(self):
        return "Date is: %s %s %s"%(self.day,self.mon,self.year)
    def IsLeapYear(self):
        """
        function returns 1 if self.year is leap,0 if it's not
        """
        if(not (self.year%400) or (not(self.year%4) and self.year%100)):
            return 1
        else:
            return 0
    #values by each month whether it's leap year or not
    monthlength = (
        [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
        [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    )

        #the function you probably were looking for
    def AddDay(self, n):
        days=n
        leap_year=self.IsLeapYear()
        while(self.day+days>=Date.monthlength[leap_year][self.mon-1]):
            days=days-(Date.monthlength[leap_year][self.mon-1]-self.day)
            self.day=0
            self.mon+=1
            if (self.mon>12):
                self.mon=1
                self.year+=1
            leap_year=self.IsLeapYear()
        else:
            self.day+=days

答案 4 :(得分:0)

class Date:
    def __init__(self, day, month, year=2015):
        self.day = day
        self.month = month
        self.year = year
        self.monthlength = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    def printUS(self):
        print self.month , "/" , self.day , "/" , self.year
    def printUK(self):
        print self.day , "." , self.month , "." , str(self.year)[2:]
    def AddDay(self,n=1):
        if (self.day) + n > (self.monthlength[self.month]):
                self.day = self.day + n - self.monthlength[self.month]
            else:
                self.day = self.day + n
import sys
mydate=Date(1,11,2015)
mydate.AddDay(31)
mydate.printUS()