Python封装的常用日期函数

处理日志数据时,经常要对日期进行进行计算,比如日期加上天数、日期相差天数、日期对应的周等计算,本文收集了几个常用的python日期功能函数,一直更新中。

直接贴代码(文件名DateUtil.py),函数功能可以直接查看注释:

# -*- encoding:utf8 -*-'''@author: crazyant@version: 2013-10-12'''import datetime, time#定义的日期的格式,可以自己改一下,比如改成"$Y年$m月$d日"format_date = "%Y-%m-%d"format_datetime = "%Y-%m-%d %H:%M:%S"def getCurrentDate():    '''            获取当前日期:2013-09-10这样的日期字符串    '''    return time.strftime(format_date, time.localtime(time.time()))def getCurrentDateTime():    '''            获取当前时间:2013-09-10 11:22:11这样的时间年月日时分秒字符串    '''    return time.strftime(format_datetime, time.localtime(time.time()))def getCurrentHour():    '''            获取当前时间的小时数,比如如果当前是下午16时,则返回16    '''    currentDateTime=getCurrentDateTime()    return currentDateTime[-8:-6] def getDateElements(sdate):    '''            输入日期字符串,返回一个结构体组,包含了日期各个分量            输入:2013-09-10或者2013-09-10 22:11:22            返回:time.struct_time(tm_year=2013, tm_mon=4, tm_mday=1, tm_hour=21, tm_min=22, tm_sec=33, tm_wday=0, tm_yday=91, tm_isdst=-1)    '''    dformat = ""    if judgeDateFormat(sdate) == 0:        return None    elif judgeDateFormat(sdate) == 1:        dformat = format_date    elif judgeDateFormat(sdate) == 2:        dformat = format_datetime    sdate = time.strptime(sdate, dformat)    return sdatedef getDateToNumber(date1):    '''            将日期字符串中的减号冒号去掉:             输入:2013-04-05,返回20130405            输入:2013-04-05 22:11:23,返回20130405221123    '''    return date1.replace("-","").replace(":","").replace("","")def judgeDateFormat(datestr):    '''            判断日期的格式,如果是"%Y-%m-%d"格式则返回1,如果是"%Y-%m-%d %H:%M:%S"则返回2,否则返回0            参数 datestr:日期字符串    '''    try:        datetime.datetime.strptime(datestr, format_date)        return 1    except:        pass    try:        datetime.datetime.strptime(datestr, format_datetime)        return 2    except:        pass    return 0def minusTwoDate(date1, date2):    '''            将两个日期相减,获取相减后的datetime.timedelta对象            对结果可以直接访问其属性days、seconds、microseconds    '''    if judgeDateFormat(date1) == 0 or judgeDateFormat(date2) == 0:        return None    d1Elements = getDateElements(date1)    d2Elements = getDateElements(date2)    if not d1Elements or not d2Elements:        return None    d1 = datetime.datetime(d1Elements.tm_year, d1Elements.tm_mon, d1Elements.tm_mday, d1Elements.tm_hour, d1Elements.tm_min, d1Elements.tm_sec)    d2 = datetime.datetime(d2Elements.tm_year, d2Elements.tm_mon, d2Elements.tm_mday, d2Elements.tm_hour, d2Elements.tm_min, d2Elements.tm_sec)    return d1 - d2def dateAddInDays(date1, addcount):    '''            日期加上或者减去一个数字,返回一个新的日期            参数date1:要计算的日期            参数addcount:要增加或者减去的数字,可以为1、2、3、-1、-2、-3,负数表示相减    '''    try:        addtime=datetime.timedelta(days=int(addcount))        d1Elements=getDateElements(date1)        d1 = datetime.datetime(d1Elements.tm_year, d1Elements.tm_mon, d1Elements.tm_mday)        datenew=d1+addtime        return datenew.strftime(format_date)    except Exception as e:        print e        return Nonedef is_leap_year(pyear):    '''            判断输入的年份是否是闰年     '''       try:                             datetime.datetime(pyear, 2, 29)        return True              except ValueError:               return False         def dateDiffInDays(date1, date2):    '''            获取两个日期相差的天数,如果date1大于date2,返回正数,否则返回负数    '''    minusObj = minusTwoDate(date1, date2)    try:        return minusObj.days    except:        return Nonedef dateDiffInSeconds(date1, date2):    '''            获取两个日期相差的秒数    '''    minusObj = minusTwoDate(date1, date2)    try:        return minusObj.days * 24 * 3600 + minusObj.seconds    except:        return Nonedef getWeekOfDate(pdate):    '''            获取日期对应的周,输入一个日期,返回一个周数字,范围是0~6、其中0代表周日    '''    pdateElements=getDateElements(pdate)    weekday=int(pdateElements.tm_wday)+1    if weekday==7:        weekday=0    return weekdayif __name__=="__main__":    '''            一些测试代码    '''    print judgeDateFormat("2013-04-01")    print judgeDateFormat("2013-04-01 21:22:33")    print judgeDateFormat("2013-04-31 21:22:33")    print judgeDateFormat("2013-xx")    print "--"    print datetime.datetime.strptime("2013-04-01", "%Y-%m-%d")    print 'elements'    print getDateElements("2013-04-01 21:22:33")    print 'minus'    print minusTwoDate("2013-03-05", "2012-03-07").days    print dateDiffInSeconds("2013-03-07 12:22:00", "2013-03-07 10:22:00")    print type(getCurrentDate())    print getCurrentDateTime()    print dateDiffInSeconds(getCurrentDateTime(), "2013-06-17 14:00:00")    print getCurrentHour()    print dateAddInDays("2013-04-05",-5)    print getDateToNumber("2013-04-05")    print getDateToNumber("2013-04-05 22:11:33")    print getWeekOfDate("2013-10-01")

转载请注明来源:http://www.crazyant.net/1309.html

与其用泪水悔恨今天,不如用汗水拼搏今天。

Python封装的常用日期函数

相关文章:

你感兴趣的文章:

标签云: