Add one year in current date PYTHON

后端 未结 8 1488
别跟我提以往
别跟我提以往 2020-11-29 01:59

I have fetched a date from database with the following variable

{{ i.operation_date }}

8条回答
  •  再見小時候
    2020-11-29 02:31

    This is what I do when I need to add months or years and don't want to import more libraries. Just create a datetime.date() object, call add_month(date) to add a month and add_year(date) to add a year.

    import datetime
    __author__ = 'Daniel Margarido'
    
    
    # Check if the int given year is a leap year
    # return true if leap year or false otherwise
    def is_leap_year(year):
        if (year % 4) == 0:
            if (year % 100) == 0:
                if (year % 400) == 0:
                    return True
                else:
                    return False
            else:
                return True
        else:
            return False
    
    
    THIRTY_DAYS_MONTHS = [4, 6, 9, 11]
    THIRTYONE_DAYS_MONTHS = [1, 3, 5, 7, 8, 10, 12]
    
    # Inputs -> month, year Booth integers
    # Return the number of days of the given month
    def get_month_days(month, year):
        if month in THIRTY_DAYS_MONTHS:   # April, June, September, November
            return 30
        elif month in THIRTYONE_DAYS_MONTHS:   # January, March, May, July, August, October, December
            return 31
        else:   # February
            if is_leap_year(year):
                return 29
            else:
                return 28
    
    # Checks the month of the given date
    # Selects the number of days it needs to add one month
    # return the date with one month added
    def add_month(date):
        current_month_days = get_month_days(date.month, date.year)
        next_month_days = get_month_days(date.month + 1, date.year)
    
        delta = datetime.timedelta(days=current_month_days)
        if date.day > next_month_days:
            delta = delta - datetime.timedelta(days=(date.day - next_month_days) - 1)
    
        return date + delta
    
    
    def add_year(date):
        if is_leap_year(date.year):
            delta = datetime.timedelta(days=366)
        else:
            delta = datetime.timedelta(days=365)
    
        return date + delta
    
    
    # Validates if the expected_value is equal to the given value
    def test_equal(expected_value, value):
        if expected_value == value:
            print "Test Passed"
            return True
    
        print "Test Failed : " + str(expected_value) + " is not equal to " str(value)
        return False
    
    # Test leap year
    print "---------- Test leap year ----------"
    test_equal(True, is_leap_year(2012))
    test_equal(True, is_leap_year(2000))
    test_equal(False, is_leap_year(1900))
    test_equal(False, is_leap_year(2002))
    test_equal(False, is_leap_year(2100))
    test_equal(True, is_leap_year(2400))
    test_equal(True, is_leap_year(2016))
    
    # Test add month
    print "---------- Test add month ----------"
    test_equal(datetime.date(2016, 2, 1), add_month(datetime.date(2016, 1, 1)))
    test_equal(datetime.date(2016, 6, 16), add_month(datetime.date(2016, 5, 16)))
    test_equal(datetime.date(2016, 3, 15), add_month(datetime.date(2016, 2, 15)))
    test_equal(datetime.date(2017, 1, 12), add_month(datetime.date(2016, 12, 12)))
    test_equal(datetime.date(2016, 3, 1), add_month(datetime.date(2016, 1, 31)))
    test_equal(datetime.date(2015, 3, 1), add_month(datetime.date(2015, 1, 31)))
    test_equal(datetime.date(2016, 3, 1), add_month(datetime.date(2016, 1, 30)))
    test_equal(datetime.date(2016, 4, 30), add_month(datetime.date(2016, 3, 30)))
    test_equal(datetime.date(2016, 5, 1), add_month(datetime.date(2016, 3, 31)))
    
    # Test add year
    print "---------- Test add year ----------"
    test_equal(datetime.date(2016, 2, 2), add_year(datetime.date(2015, 2, 2)))
    test_equal(datetime.date(2001, 2, 2), add_year(datetime.date(2000, 2, 2)))
    test_equal(datetime.date(2100, 2, 2), add_year(datetime.date(2099, 2, 2)))
    test_equal(datetime.date(2101, 2, 2), add_year(datetime.date(2100, 2, 2)))
    test_equal(datetime.date(2401, 2, 2), add_year(datetime.date(2400, 2, 2)))
    

提交回复
热议问题