0
点赞
收藏
分享

微信扫一扫

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 sdate

def 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 0

def 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 - d2

def 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 None

def 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 None

def dateDiffInSeconds ( date1 , date2 ) :
'' '
获取两个日期相差的秒数
' ''
minusObj = minusTwoDate ( date1 , date2 )
try :
return minusObj . days * 24 * 3600 + minusObj . seconds
except :
return None

def getWeekOfDate ( pdate ) :
'' '
获取日期对应的周,输入一个日期,返回一个周数字,范围是0~6、其中0代表周日
' ''
pdateElements = getDateElements ( pdate )

weekday = int ( pdateElements . tm_wday ) + 1
if weekday == 7 :
weekday = 0
return weekday

if __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" )



举报

相关推荐

0 条评论