Python时间和日期操作需要用到datetime和time标准库模块。
一、time模块
1.time模块表示时间的方式
①时间戳
②格式化的时间字符串
③以数组的形式表示,即(struct_time),共有九个元素
2.常用函数
①asctime([tuple]) -> string
将一个struct_time(默认为当时时间),转换成字符串。
>>> time.asctime()
'Sun Jul 31 11:10:39 2016'
>>> import time
>>> thisTime = "2016-07-31 12:12:12"
>>> timeTuple = time.strptime(thisTime, "%Y-%m-%d %H:%M:%S")
>>> time.asctime(timeTuple)
'Sun Jul 31 12:12:12 2016'
②ctime(seconds) -> string
将一个时间戳(默认为当前时间)转换成一个时间字符串。
>>> time.ctime()
'Sun Jul 31 11:11:33 2016'
>>> time.ctime(1469938332)
'Sun Jul 31 12:12:12 2016'
③ gmtime([seconds]) -> (tm_year, tm_mon, tm_day, tm_hour, tm_min,tm_sec, tm_wday, tm_yday, tm_isdst)
将一个时间戳转换成一个UTC时区(0时区)的struct_time,如果seconds参数未输入,则以当前时间为转换标准。
>>> time.gmtime()
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=31, tm_hour=3, tm_min=15, tm_sec=35, tm_wday=6, tm_yday=213, tm_isdst=0)
>>> time.gmtime(1469938332)
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=31, tm_hour=4, tm_min=12, tm_sec=12, tm_wday=6, tm_yday=213, tm_isdst=0)
④localtime([seconds]) -> (tm_year,tm_mon,tm_day,tm_hour,tm_min,tm_sec,tm_wday,tm_yday,tm_isdst)
将一个时间戳转换成一个当前时区的struct_time,如果seconds参数未输入,则以当前时间为转换标准。
>>> time.localtime()
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=31, tm_hour=11, tm_min=17, tm_sec=17, tm_wday=6, tm_yday=213, tm_isdst=0)
>>> time.localtime(1469938332)
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=31, tm_hour=12, tm_min=12, tm_sec=12, tm_wday=6, tm_yday=213, tm_isdst=0)
⑤ mktime(tuple) -> floating point number
将一个以struct_time转换为时间戳。
>>> import time
>>> thisTime = "2016-07-31 12:12:12"
>>> timeTuple = time.strptime(thisTime, "%Y-%m-%d %H:%M:%S")
>>> time.mktime(timeTuple)
1469938332.0
⑥ strftime(format[, tuple]) -> string
将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出。
>>> time.strftime("%Y-%m-%d %H:%M:%S")
'2016-07-31 11:20:41'
>>> import time
>>> thisTime = "2016-07-31 12:12:12"
>>> timeTuple = time.strptime(thisTime, "%Y-%m-%d %H:%M:%S")
>>> time.strftime("%Y-%m-%d %H:%M:%S",timeTuple)
'2016-07-31 12:12:12'
⑦strptime(string, format) -> struct_time
将时间字符串根据指定的格式化符转换成数组形式的时间。
>>> import time
>>> thisTime = "2016-07-31 12:12:12"
>>> timeTuple = time.strptime(thisTime, "%Y-%m-%d %H:%M:%S")
>>> print timeTuple
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=31, tm_hour=12, tm_min=12, tm_sec=12, tm_wday=6, tm_yday=213, tm_isdst=-1)
⑧time() -> floating point number
返回当前时间的时间戳。
>>> time.time()
1469935566.776
二、datetime模块
1.datetime中的常量
2.datetime中的类
3.date类
date类表示一个由年、月、日组成的日期。
①类方法与类属性
date类定义了一些常用的类方法与类属性,方便我们操作:
②实例方法和属性
date提供的实例方法和属性:
③date支持的其他操作
4.Time类
time类表示时间,由时、分、秒以及微秒组成。
①time类定义的类属性
②time类提供的实例方法和属性
像date一样,也可以对两个time对象进行比较,或者相减返回一个时间间隔对象。
5.datetime类
datetime是date与time的结合体,包括date与time的所有信息。
①datetime类定义的类属性与方法
②datetime类提供的实例方法与属性
像date一样,也可以对两个datetime对象进行比较,或者相减返回一个时间间隔对象,或者日期时间加上一个间隔返回一个新的日期时间对象。
6.timedelta与tzinfo类
①timedelta类
datetime.timedelta对象代表两个时间之间的的时间差,两个date或datetime对象相减时可以返回一个timedelta对象。
timedelta包含数据days、seconds、microseconds,表示天数、秒数、微秒数,包含方法total_seconds() ,表示时间间隔的总秒数。
②tzinfo类
tzinfo:与时区有关的相关信息。
三、常见的日期时间操作
1.将字符串格式的日期转换为时间戳
方法:先将其转换为时间元组,再转换为时间戳。
>>> import time
>>> thisTime = "2016-07-31 12:12:12"
>>> timeTuple = time.strptime(thisTime, "%Y-%m-%d %H:%M:%S")
>>> timeStamp = int(time.mktime(timeTuple))
>>> print timeStamp
1469938332
2.将时间戳转换为指定格式的日期
方法一
>>> import time
>>> timeStamp = 1469938332
>>> timeTuple = time.localtime(timeStamp)
>>> otherTime = time.strftime("%Y-%m-%d %H:%M:%S", timeTuple)
>>> print otherTime
2016-07-31 12:12:12
方法二
>>> import datetime
>>> timeStamp = 1469938332
>>> dt= datetime.datetime.utcfromtimestamp(timeStamp)
>>> otherTime = dt.strftime("%Y-%m-%d %H:%M:%S")
>>> print otherTime
2016-07-31 04:12:12
3.更改日期格式
方法:先转换为时间元组,然后转换为其他格式。
>>> import time
>>> thisTime = "2016-07-31 12:12:12"
>>>timeTuple = time.strptime(thisTime, "%Y-%m-%d %H:%M:%S")
>>>otherTime = time.strftime("%Y/%m/%d %H:%M:%S", timeTuple)
>>> print otherTime
2016/07/31 12:12:12
4.将当前时间并转换为指定日期格式
方法一:
>>> import time
>>> nowStamp = int(time.time())
>>> timeTuple = time.localtime(nowStamp)
>>> otherTime = time.strftime("%Y-%m-%d %H:%M:%S", timeTuple)
>>> print otherTime
2016-07-31 10:19:47
方法二:
>>> import datetime
>>> now = datetime.datetime.now()
>>> otherTime = now.strftime("%Y-%m-%d %H:%M:%S")
>>> print otherTime
2016-07-31 10:21:45
5、获取今天、昨天和明天的日期
>>> import datetime
>>> today = datetime.date.today()
>>> yesterday = today - datetime.timedelta(days=1)
>>> tomorrow = today + datetime.timedelta(days=1)
>>> print "昨天:%s, 今天:%s, 明天:%s" % (yesterday, today, tomorrow)
昨天:2016-07-30, 今天:2016-07-31, 明天:2016-08-01
6.计算前1天、后一天的时间
>>> import datetime
>>> dtOneDayAgo = (datetime.datetime.now() - datetime.timedelta(days = 1)).strftime("%Y-%m-%d %H:%M:%S")
>>> dtOneDayAfter = (datetime.datetime.now() + datetime.timedelta(days = 1)).strftime("%Y-%m-%d %H:%M:%S")
>>> print dtOneDayAgo,dtOneDayAfter
2016-07-30 10:39:54 2016-08-01 10:40:14
7、获取当前的时间
(1)使用time模块
>>> import time
>>> currentTime = time.strftime("%H:%M:%S")
>>> print currentTime
10:44:30
(2)使用datetime模块
>>> import datetime
>>> now = datetime.datetime.now()
>>> currentTime=str(now.hour)+":"+str(now.minute)+":"+str(now.second)
>>> print currentTime
10:52:18
四、日期和时间的格式化参数