• python:日期计算


    python语言中的datetime模块可以利用其中的方法获取不同的日期,比如获取当前日期、明天、昨天、上个月、下个月和明年。下面利用几个实例说明这些日期的获取方法,操作如下:

    第一步,利用datetime模块获取当前日期
    datetime.date.today();
    如下图所示:

     第二步,获取当前日期前一天日期,利用当前日期减去一天,如下图所示:

     第三步,获取当前日期后一天日期,利用当前日期加上一天,如下图所示:

     第四步,获取当前日期下一个月日期,利用当前日期加上30天,如下图所示:

     第五步,获取当前日期上一个月的日期,利用当前日期减去30天,如下图所示:

     第六步,获取当前日期返回明年今天的日期,利用当前日期加上365天,如下图所示:

    # -*- coding: utf-8 -*-
    
    #-----------------------------------------------------------------------------------
    import datetime
    #获取366天前的日期
    day=(datetime.date.today() - datetime.timedelta(days=366)).strftime('%Y-%m-%d')
    print(day)
    #获取366天后的日期
    day=(datetime.date.today() + datetime.timedelta(days=366)).strftime('%Y-%m-%d')
    print(day)
    #3周前期
    day=(datetime.date.today() + datetime.timedelta(weeks=-3)).strftime('%Y-%m-%d')
    print(day)
    #-----------------------------------------------------------------------------------
    
    '''获取当前日期前后N天或N月的日期'''
    
    from time import strftime, localtime
    from datetime import timedelta, date
    import calendar
    
    
    year = strftime("%Y", localtime())
    mon = strftime("%m", localtime())
    day = strftime("%d", localtime())
    hour = strftime("%H", localtime())
    min = strftime("%M", localtime())
    sec = strftime("%S", localtime())
    
    
    def today():
        '''''
        get today,date format="YYYY-MM-DD"
        '''''
        return date.today()
    
    def todaystr():
        '''
        get date string, date format="YYYYMMDD"
        '''
        return year + mon + day
    
    def datetime():
        '''''
        get datetime,format="YYYY-MM-DD HH:MM:SS"
        '''
        return strftime("%Y-%m-%d %H:%M:%S", localtime())
    
    def datetimestr():
        '''''
        get datetime string
        date format="YYYYMMDDHHMMSS"
        '''
        return year + mon + day + hour + min + sec
    
    def get_day_of_day(n=0):
        '''''
        if n>=0,date is larger than today
        if n<0,date is less than today
        date format = "YYYY-MM-DD"
        '''
        if (n < 0):
            n = abs(n)
            return date.today() - timedelta(days=n)
        else:
            return date.today() + timedelta(days=n)
    
    def get_days_of_month(year, mon):
        '''''
        get days of month
        '''
        return calendar.monthrange(year, mon)[1]
    
    def get_firstday_of_month(year, mon):
        '''''
        get the first day of month
        date format = "YYYY-MM-DD"
        '''
        days = "01"
        if (int(mon) < 10):
            mon = "0" + str(int(mon))
        arr = (year, mon, days)
        return "-".join("%s" % i for i in arr)
    
    def get_lastday_of_month(year, mon):
        '''''
        get the last day of month
        date format = "YYYY-MM-DD"
        '''
        days = calendar.monthrange(year, mon)[1]
        mon = addzero(mon)
        arr = (year, mon, days)
        return "-".join("%s" % i for i in arr)
    
    def get_firstday_month(n=0):
        '''''
        get the first day of month from today
        n is how many months
        '''
        (y, m, d) = getyearandmonth(n)
        d = "01"
        arr = (y, m, d)
        return "-".join("%s" % i for i in arr)
    
    def get_lastday_month(n=0):
        '''''
        get the last day of month from today
        n is how many months
        '''
        return "-".join("%s" % i for i in getyearandmonth(n))
    
    def getyearandmonth(n=0):
        '''''
        get the year,month,days from today
        befor or after n months
        '''
        thisyear = int(year)
        thismon = int(mon)
        totalmon = thismon + n
        if (n >= 0):
            if (totalmon <= 12):
                days = str(get_days_of_month(thisyear, totalmon))
                totalmon = addzero(totalmon)
                return (year, totalmon, days)
            else:
                i = totalmon / 12
                j = totalmon % 12
                if (j == 0):
                    i -= 1
                    j = 12
                thisyear += i
                days = str(get_days_of_month(thisyear, j))
                j = addzero(j)
                return (str(thisyear), str(j), days)
        else:
            if ((totalmon > 0) and (totalmon < 12)):
                days = str(get_days_of_month(thisyear, totalmon))
                totalmon = addzero(totalmon)
                return (year, totalmon, days)
            else:
                i = totalmon / 12
                j = totalmon % 12
                if (j == 0):
                    i -= 1
                    j = 12
                thisyear += i
                days = str(get_days_of_month(thisyear, j))
                j = addzero(j)
                return (str(thisyear), str(j), days)
    
    def addzero(n):
        '''''
        add 0 before 0-9
        return 01-09
        '''
        nabs = abs(int(n))
        if (nabs < 10):
            return "0" + str(nabs)
        else:
            return nabs
    
    def get_today_month(n=0):
        '''''
        获取当前日期前后N月的日期
        if n>0, 获取当前日期前N月的日期
        if n<0, 获取当前日期后N月的日期
        date format = "YYYY-MM-DD"
        '''
        (y, m, d) = getyearandmonth(n)
        arr = (y, m, d)
        if (int(day) < int(d)):
            arr = (y, m, day)
        return "-".join("%s" % i for i in arr)
    
    
    if __name__ == "__main__":
        print today()#获取当前日期,2017-12-02
        print todaystr()#20171202
        print datetime()#2017-12-02 16:37:19
        print datetimestr()#20171202163719
        print get_day_of_day(20)#获取20天后的日期,2017-12-22
        print get_day_of_day(-3)#获取3天前的日期,2017-11-29
        print get_today_month(-3)#获取3个月前的日期,  2017-09-02
        print get_today_month(3)# 获取3个月后的日期, 2018-03-02
        print get_today_month(19)# 获取19个月后的日期,2019-07-02
  • 相关阅读:
    回想四叉树LOD地形(上)
    项目优化经验分享(四)需求与原型图
    CF79D Password
    2018-3-7-VisualStudio-csproj-添加-ItemGroup-的-Service-
    2018-3-7-VisualStudio-csproj-添加-ItemGroup-的-Service-
    2018-8-10-如何入门-C++-AMP-教程
    2018-8-10-如何入门-C++-AMP-教程
    2019-11-6-Roslyn-how-to-use-WriteLinesToFile-to-write-the-semicolons-to-file
    2019-11-6-Roslyn-how-to-use-WriteLinesToFile-to-write-the-semicolons-to-file
    2019-1-4-win10-uwp-win2d-CanvasVirtualControl-与-CanvasAnimatedControl
  • 原文地址:https://www.cnblogs.com/gcgc/p/11679376.html
Copyright © 2020-2023  润新知