由于参加数据挖掘的比赛,在比赛中用到了关于时间的几个模块,用几篇文章来总结下关于时间的一些模块,还有这些模块之间的不同之处。这里先总结下datatime模块。
首先python中关于时间的模块有多个如time模块,datetime模块,因为之前的数据挖掘比赛首先用到的是datetime模块,那么先来总结下datetime模块,下一篇再来总结time模块。
datetime模块中的首先需要知道的是datetime模块中所包含的类,然后是每一个类之中包含是方法和运用。
一.模块之中的类
1.date 作用是管理日期的对象,主要的属性有year,month,day(年,月,日) |
2.datetime 作用是管理日期时间的对象,主要的属性有hour, minute, second(小时,分钟,秒) |
3.time 作用是管理时间的模块,主要是得到一个时间对象 |
4.timedelta 作用是时间间隔对象,主要是计算两个时间点之间的时间间隔 |
5.tzinfo 作用是时区信息对象,作用是得到某一个时区的信息 |
6.datetime_CAPI 作用是日期时间对象的C语言接口 |
二.除了模块中的几个常量
MAXYEAR 作用是计算最大的年限 |
MINYEAR 作用是计算最小的年限 |
三.关于模块中类的运用
1.date类
(1) 关于当前日期的函数today()和fromtimestamp()
首先date是datetime中的类,因此该类的构造函数是class datetime.date(year, month, day): 从中可以看出年,月,日,是然后可以从此对象中得到的需要的信息。如下
>>>import datetime
>>>a=datetime.date.today()
>>>print(a)
2018-08-27
today()函数的作用是返回目前的日期。还有一个函数有同样的效果,但是需要time模块中的time()函数的辅助,具体如下
>>>import time
>>>a=time.time()
>>>b=datetime.date.fromtimestamp(a)
>>>print(b)
2018-08-27
这个函数就是fromtimestamp()需要的参数的当前时间的时间戳,time模块中的time()函数返回的就是当前时间的时间戳,如下
>>>import time
>>>a=time.time()
>>>print(a)
1535366826.3582115
还可以自己设置时间,可以认为是自己设置构造函数中的三个参数,如下
>>>a=datetime.date(2017,5,30)
>>>print(a)
2017-05-30
这样就输出了固定格式的日期。
(2) 关于周末和周几的函数weekday()和isweekday()
weekend()的参数必须是date中一个对象,返回的是当天是一周的第几天,具体用法如下
>>>import datetime
>>>a=datetime.date.today()
>>>t=datetime.date.weekday(a)
>>>print(t)
0
还有就是isoweekday()返回的是当天是周几,注意和上面的weekday相区别
>>>import datetime
>>>a=datetime.date.today()
>>>t=datetime.date.isoweekday(a)
>>>print(t)
1
(3) isocalendar()需要的参数和前面一样也是一个date的对象,函数返回的是一个元组内有三个值分别表示的是当天是年,周(这一年的第几周),天(这一周是第几天),具体如下
>>>import datetime
>>>a=datetime.date.today()
>>>t=datetime.date.isocalendar(a)
>>>print(t)
(2018, 35, 1)
表示当天是2018年的第三十五周的第一天。
(4) strftime()函数,将日期按照自己设置的格式进行输出,在datetime类中也有一样的函数
>>>a=datetime.date.today()
>>>b=a.strftime("%Y-%m-%d %H:%M:%S")
>>>print(b)
2018-08-27 00:00:00
(5)replace(year, month, day)函数来将日期中相应的年,月,天进行替换,如下
>>>import datetime
>>>a=datetime.date.today()
>>>t=a.replace(day=20)
>>>print(t)
2018-08-20
2.datetime类
datetime类是date和time的结合体,包括date与time的所有信息,date和time类中具有的方法和属性,datetime类都具有。此类的构造函数是datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]]) ,具体含义和前面的date中的年月日差不多。
函数有today(),now(),fromtimestamp(timestamp[,tz]) ,strptime("时间字符串",format)
属性有year、month、day、hour、minute、second属性,和构造函数的参数对应
下面是函数的主要的功能
1、today函数 返回一个当前本地时间的datetime.datetime类的对象。 |
2、now([tz]) 不指定时区,返回一个当前本地时间的datetime.datetime类的对象。指定时区,返回指定时区的时间 |
3、fromtimestamp(timestamp[,tz]) 给定一个时间戳,返回指定时区的datetime.datetime类的对象。不指定时区,返回本地时区的datetime类对象 |
4、strptime("时间字符串",format) 将格式时间字符串转换为datetime对象 |
5、Datetime类—year、month、day、hour、minute、second属性 |
(1) today()函数
>>>import datetime
>>>a=datetime.datetime.today()
>>>print(a)
2018-08-27 21:11:26.551240
与前面的date中的today进行比较这里多了时,分,秒
(2) now()
这个和前面的today类似,主要的区别就是now([tz])可以指定时区,相应地会返回对应时区的时间
(3) fromtimestamp(timestamp[,tz])
这个也和前面date中的fromtimestamp相似,需要用到time模块中的time()来得到现在时间的时间戳,然后利用时间戳来计算具体格式化的时间
(4) strptime("时间字符串",format)
这个函数经常会用到,意思是将时间字符串来进行转化成相应的格式,后面的format代表格式,这个可以自己设置。具体如下
>>>from datetime import datetime
>>>a=datetime.strptime("2018-8-27 21:44:55","%Y-%m-%d %H:%M:%S")
>>>print(a)
2018-08-27 21:44:55
主要功能就是将字符串的格式进行转换成datetime对象,然后使用上面的属性,得到year,month,day等信息,如下
>>>from datetime import datetime
>>>a=datetime.strptime("2018-8-27 21:44:55","%Y-%m-%d %H:%M:%S")
>>>b=a.year
>>>c=a.month
>>>d=a.day
>>>print(b)
>>>print(c)
>>>print(d)
2018
8
27
(5)还有几个函数需要datetime对象作为参数,具体的功能之前的date中的函数类似只是这里datetime代表的是日期和时间
date() 作用是用来得到一个date对象,具体含义和前面的date类似,参数是datetime对象 |
time() 作用和上面相同,参数也是datetime对象 |
combine() 作用是来得到一个datetime对象,参数是一个date对象和time对象 |
replace() 作用和上面date中的replace类似,具体就不多说了 |
timetuple() 作用是得到的一个结构化的年月日时分秒对象,即struct_time对象 |
weekday() 作用和前面date中的weekday类似,但是这里的参数是datetime对象或者是date对象 |
isocalendar() 作用是返回一个(年,月,日)元组,因为这个函数表示的是日期所以只能返回年月日,然后可以根据元组选出需要的年,月,日 |
strftime() 作用是和前面datetime中的strftime一样,只是这里多了时间 |
1.date()
>>>import datetime
>>>a=datetime.datetime.today()
>>>b=datetime.datetime.date(a)
>>>print(b)
2018-08-28
2.time()
>>>import datetime
>>>a=datetime.datetime.today()
>>>b=datetime.datetime.time(a)
>>>print(b)
10:54:09.700457
3.combine()
>>>import datetime
>>>a=datetime.datetime.today()
>>>b=datetime.datetime.date(a)
>>>c=datetime.datetime.time(a)
>>>d=datetime.datetime.combine(b,c)
>>>print(d)
2018-08-28 11:08:11.340873
4.replace()
>>>import datetime
>>>a=datetime.datetime.today()
>>>b=datetime.datetime.date(a)
>>>c=datetime.datetime.time(a)
>>>d=datetime.datetime.combine(b,c)
>>>e=d.replace(day=10)
>>>print(e)
2018-08-10 11:11:46.989113
5.timetuple()
>>>import datetime
>>>a=datetime.datetime.today()
>>>b=datetime.datetime.timetuple(a)
>>>print(b)
time.struct_time(tm_year=2018, tm_mon=8, tm_mday=28, tm_hour=11, tm_min=13, tm_sec=50, tm_wday=1, tm_yday=240, tm_isdst=-1)
6.weekday()
>>>import datetime
>>>a=datetime.datetime.today()
>>>b=datetime.datetime.weekday(a)
>>>print(b)
1
7.isocalender()
>>>import datetime
>>>a=datetime.datetime.today()
>>>b=datetime.datetime.isocalendar(a)
>>>print(b)
(2018, 35, 2)
8.strftime() 两种运用方法
>>>import datetime
>>>a=datetime.datetime.today()
>>>b=a.strftime("%Y-%m-%d %H:%M:%S")
>>>print(b)
2018-08-28 11:23:25
>>>import datetime
>>>a=datetime.datetime.today()
>>>b=datetime.datetime.strftime(a,"%Y-%m-%d %H:%M:%S")
>>>print(b)
2018-08-28 11:23:25
3.time类
主要就是对一天中的时间进行管理,构造方法是datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None),可以看出里面的参数是时,分,秒,微秒,时区
对象属性有hour,minute,second,microsecond,tzinfo
主要的函数如下
replace() 作用和前面一样主要进行替换,只是这里替换的是hour,minute,second |
__format__(format) 作用是对时间进行按照相应的格式进行转化 |
__str__()转换成相应的字符串 |
isoformat() 作用是使得输出的时间符合iso标准 |
strftime() 和前面一样使得时间的格式按照自己需要的进行转换 |
具体的用法如下
先自己构造一个时间(时,分,秒,微秒)
>>>import datetime
>>>a=datetime.time(10,20,10,800)
>>>print(a)
10:20:10.000800
1.replace
>>>import datetime
>>>a=datetime.time(10,20,10,800)
>>>b=a.replace(hour=5)
>>>print(b)
05:20:10.000800
2.__format__(format)
>>>import datetime
>>>a=datetime.time(10,20,10,800)
>>>b=a.__format__('%H:%M:%S')
>>>print(b)
10:20:10
3.__str__()
>>>import datetime
>>>a=datetime.time(10,20,10,800)
>>>b=a.__str__()
b
'10:20:10.000800'
4.isoformat()
>>>import datetime
>>>a=datetime.time(10,20,10,800)
>>>b=a.isoformat()
b
'10:20:10.000800'
5.strftime()
>>>import datetime
>>>a=datetime.time(10,20,10,800)
>>>a.strftime('%H:%M:%S')
'10:20:10'
4.imedelta 类
此类主要是计算两个时间间隔之间的时间,两个date或datetime对象相减就可以返回一个timedelta对象。
构造函数是class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
datetime.timedelta(day=1)代表一天后的时间,即时间差是正的,假如datetime.timedelta(day=-1)那么代表时间差是负的,代码如下
>>>import datetime
>>>a=datetime.timedelta(days=1)
>>>b=datetime.timedelta(days=-1)
>>>print(a)
1 day, 0:00:00
-1 day, 0:00:00
一般对这个类的用处是来计算多长时间后或者多长时间之前的某一个时间,比如计算两个小时十分钟后的时间,如下
>>>import datetime
>>>now=datetime.datetime.now()
>>>a=now+datetime.timedelta(hours=2,minutes=10)
>>>print(a)
2018-08-28 17:47:33.540764
相应的假如要求两个小时十分钟前的时间只需要将now+datetime.timedelta(hours=2,minutes=10) 中的加号改成减号或者将函数内部的参数改成负号。
total_seconds()来计算此时间间隔经过的秒数,如下
>>>datetime.timedelta(hours=2,minutes=10).total_seconds()
7800.0
即两个小时十分钟经过的秒数是7800秒。
5.tzinfo类
tzinfos 是作为时区的类,一般情况下运用的不多。这里要提一下pytz模块,在python中用pytz来转换模块,具体代码如下
>>>import pytz
>>>dt = datetime.datetime.fromtimestamp(1405938446, pytz.timezone('UTC'))
>>>print(dt.tzinfo)
UTC
四.格式化的表格
符号 | 含义 |
%y | 两位数的年份表示(00-99) |
%Y | 四位数的年份表示(000-9999) |
%m | 月份(01-12) |
%d | 月内中的一天(0-31) |
%H | 24小时制小时数(0-23) |
%I | 12小时制小时数(01-12) |
%M | 分钟数(00=59) |
%S | 秒(00-59) |
%a | 本地简化星期名称 |
%A | 本地完整星期名称 |
%b | 本地简化的月份名称 |
%B | 本地完整的月份名称 |
%c | 本地相应的日期表示和时间表示 |
%j | 年内的一天(001-366) |
%p | 本地A.M.或P.M.的等价符 |
%U | 一年中的星期数(00-53)星期天为星期的开始 |
%w | 星期(0-6),星期天为星期的开始 |
%Z | 当前时区的名称 |
转载请说明出处