Python如何进行时间处理
我们会经常遇到对时间的处理,用python来进行时间处理简直不要太方便了,这一期就给大家介绍一下python的时间处理!
用python进行时间处理主要会用到time,calendar,datetime及pandas这几个库,其中又以后两个最为常用。
这一期我们主要介绍一下用datetime库进行时间处理的常用操作。
1.datetime基础
1.1获取当前时间
importtime
importdatetimeasdtm
##用datetime获取当前时间
dtime=dtm.datetime.now()#dtm.datetime.utcnow()
dtime
#datetime.datetime(2018,12,15,13,1,30,200649)#年、月、日、时、分、秒、微秒
dtime.year,dtime.month,dtime.day
#(2018,12,15)
dtm.datetime.strftime(dtm.datetime.now(),'%Y-%m-%d%H:%M:%S')
#'2018-12-1520:47:45'
#用time库获取当前时间:
time.strftime('%Y-%m-%d%H:%M:%S',time.localtime(time.time()))
#'2018-12-1520:49:17'
time.strftime("%Y-%m-%d%H:%M:%S")
#'2018-12-1520:50:11'
1.2datetime基本操作
fromdatetimeimportdatetime,date,time
#Usingdatetime.combine()
d=date(2005,7,14)
t=time(12,30)
datetime.combine(d,t)
datetime(2005,7,14,12,30)
#datetime类的方法:
datetime.date()
datetime.time()
#可以用str()直接将时间格式转化为字符串
dt=datetime(2005,7,14,12,30)
#datetime(%Y,%m,%d,%H,%M,%S):
#datetime共有6个参数,分别代表的是年月日时分秒。其中年月日是必须要传入的参数,时分秒可以不传入,默认全为零。
#>>>#Usingdatetime.timetuple()togettupleofallattributes
tt=dt.timetuple()
foritintt:
print(it)
#2005#year
#7#month
#14#day
#12#hour
#30#minute
#0#second
#3#weekday(0=Monday,6=Sunday)
#195#numberofdayssince1stJanuary
#-1#dst-methodtzinfo.dst()returnedNone
####################################################
#返回今天是周几
x='2018-05-27'
int(dtm.datetime(int(x[:4]),int(x[5:7]),int(x[8:])).strftime('%w'))
#0表示周日
dtm.datetime(2017,1,1).strftime("%w")#0-6SUN-SAT
2.时间戳的转换
Unix时间戳: Unix中常常使用一个数字记录时间,表示距离起始时间相差的秒数(根据系统的精度,时间单位有时毫秒,有时是纳秒)。大于0表示在起始时间之后,小于0就表示在起始时间之前。这个数字有时是浮点类型、有时是整数类型,但都称这个数字为Unix时间戳(Timestamp)
importtime
importdatetimeasdtm
##获取当前时间
dtime=dtm.datetime.now()#dtm.datetime.utcnow()
#时间戳
ans_time=int(time.mktime(dtime.timetuple()))
ans_time
#1535860540
#时间戳的转换-1
t1=datetime.datetime.fromtimestamp(ans_time)#localtime
t1
#datetime.datetime(2018,9,2,11,55,40)
#也可以用time模块的localtime()方法:time.localtime(ans_time)
#时间戳的转换-2
t2=datetime.datetime.utcfromtimestamp(ans_time)#utctime
t2
#datetime.datetime(2018,9,2,3,55,40)
t2.strftime("%Y--%m--%d%H:%M:%S")
#2018--09--0203:55:40
#时间戳的转换-3
pd.to_datetime(ans_time,unit='s')#utctime
#Timestamp('2018-09-0203:55:40')
3.时间格式的转换
- strftime即stringformattime,用来将时间格式化成字符串
- strptime即stringparsetime,用来将字符串解析成时间
importdatetimeasdtm
start=dtm.datetime(2011,1,7,1,21,1)
#datetime.datetime(2011,1,7,1,21,1)
start.strftime('%Y-%m-%d%H:%M:%S')
#'2011-01-0701:21:01'
dtm.datetime.strptime('2011-01-0701:21:01','%Y-%m-%d%H:%M:%S')
#datetime.datetime(2011,1,7,1,21,1)
str(start)
#'2011-01-0701:21:01'
start.strftime("%Y-%m-%d00:00:00")
#'2011-01-0700:00:00'
#Thestrftimemethodformatsadatetimeasastring:
In[1]:dt.strftime('%m/%d/%Y%H:%M')
Out[1]:'10/29/201120:30'
#Stringscanbeconverted(parsed)intodatetimeobjectsusingthestrptimefunction:
In[2]:dtm.datetime.strptime('20091031','%Y%m%d')
Out[2]:datetime.datetime(2009,10,31,0,0)
>>>z
dtm.datetime(2012,9,23,21,37,4,177393)
>>>nice_z=dtm.datetime.strftime(z,'%A%B%d,%Y')
>>>nice_z
'SundaySeptember23,2012'
#字符串形式的时间格式转化为时间格式
dt=dtm.datetime.strptime("21/11/0616:30","%d/%m/%y%H:%M")
#时间格式转化为字符串
#time.strftime('%Y-%m-%d',time.localtime(time.time()))
#>>>#Formattingdatetime
print(dt.strftime("%A,%d.%B%Y%I:%M%p"))
#'Tuesday,21.November200604:30PM'
'The{1}is{0:%d},the{2}is{0:%B},the{3}is{0:%I:%M%p}.'.format(dt,"day","month","time")
#'Thedayis21,themonthisNovember,thetimeis04:30PM.'
'''
Datetimeformatspecification:
%YFour-digityear
%yTwo-digityear
%mTwo-digitmonth[01,12]
%dTwo-digitday[01,31]
%HHour(24-hourclock)[00,23]
%IHour(12-hourclock)[01,12]
%MTwo-digitminute[00,59]
%SSecond[00,61](seconds60,61accountforleapseconds)
%wWeekdayasinteger[0(Sunday),6]
datetime.strptime解析时间需要输入相应的时间格式,而dateutil第三方库中的parser.parse方法则更加灵活。
dateutil.parser有时候也会有一定的麻烦,比如'42'会被解析为2042年加上今天的日期:datetime.datetime(2042,9,1,0,0)
fromdateutil.parserimportparse
parse('2011-01-03')#datetime.datetime(2011,1,3,0,0)
parse('Jan31,199710:45PM')#datetime.datetime(1997,1,31,22,45)
parse('6/12/2011',dayfirst=True)#datetime.datetime(2011,12,6,0,0)
#pandas:
datestrs=['2011-07-0612:00:00','2011-08-0600:00:00']
pd.to_datetime(datestrs)
#DatetimeIndex(['2011-07-0612:00:00','2011-08-0600:00:00'],dtype='datetime64[ns]',freq=None)
4.Timedelta
timedelta可以表示两个时间之间的时间差:
dtm.timedelta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0)
t1=dtm.datetime(2018,7,12,15,6,9) t2=dtm.datetime(2018,9,11,12,33,23) td=t2-t1 td #datetime.timedelta(60,77234) td.days,td.seconds #(60,77234) #将timedelta转换为:day,hour,minute defparse_timedelta(td): """ transformtimedeltatoday,hour,minute """ returntd.days,td.seconds//3600,(td.seconds//60)%60 parse_timedelta(td) #(60,21,27)
利用timedelta进行时间外推:
importdatetimeasdtm
#100天前的日期
(dtm.datetime.now()-dtm.timedelta(days=100)).strftime("%Y-%m-%d")
defTaftD(FORMAT_DATE,i):
"""
返回几天后的时间
"""
return(dtm.datetime.strptime(FORMAT_DATE,'%Y-%m-%d')+dtm.timedelta(days=i)).strftime('%Y-%m-%d')
defTaftH(FORMAT_TIME,i):
"""
返回几小时后的时间
"""
return(dtm.datetime.strptime(FORMAT_TIME,'%Y-%m-%d%H:%M:%S')+dtm.timedelta(hours=i)).strftime('%Y-%m-%d%H:%M:%S')
TaftD("2018-05-17",-2)
#'2018-05-15'
TaftH("2018-05-1710:40:00",2)
#'2018-05-1712:40:00'
这一期主要介绍了是datetime进行时间处理的一些常用操作,后续我们会介绍pandas中的一些时间处理的操作。欢迎点赞转发期待哦~
以上就是Python如何进行时间处理的详细内容,更多关于Python时间处理的资料请关注毛票票其它相关文章!