time模块
一、简介
1.在python中通常有这几种方式表示时间:
1) 时间戳
2) 格式化的时间字符串
3) 时间元组(struct_time)共九个元素
2. UTC亦即格林威治时间,世界标准时间。在中国为 UTC+8。
3. 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。返回时间戳方式的函数主要有time()等。
4.时间元组(struct_time)方式:struct_time共有9个元素,返回struct_time的主要函数有gmtime(),localtime(),strptime()。如下:
二、时间函数
import time
1. time.time() 返回当前时间的时间戳
t = time.time() print(t) # 输出 1495016507.4327872
2. time.localtime() 将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准
t1 = time.localtime() print(t1) #输出 time.struct_time(tm_year=2017, tm_mon=5, tm_mday=17, tm_hour=18, tm_min=22, tm_sec=54, tm_wday=2, tm_yday=137, tm_isdst=0)
3.time.gmtime() 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
t3 = time.gmtime() print(t3) # 输出 time.struct_time(tm_year=2017, tm_mon=5, tm_mday=17, tm_hour=10, tm_min=22, tm_sec=54, tm_wday=2, tm_yday=137, tm_isdst=0)
可以看到 tm_hour 和 上面的相差了8个小时
4. time.mktime() 将一个struct_time转化为时间戳。
print(time.mktime(t1)) # 输出 1495016896.0
5.time.asctime() 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。如果没有参数,将会将time.localtime()作为参数传入。
print(time.asctime()) # 输出 Wed May 17 19:09:05 2017
6. time.ctime() 同上
7.time.strftime(format,t)
把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出。
t = time.localtime() print(t) print(time.strftime("%Y-%m-%d %X", t)) # 输出 time.struct_time(tm_year=2017, tm_mon=5, tm_mday=17, tm_hour=19, tm_min=16, tm_sec=4, tm_wday=2, tm_yday=137, tm_isdst=0) 2017-05-17 19:16:04
8.time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
t = "2017-05-16 17:23:12" print(time.strptime(t, "%Y-%m-%d %H:%M:%S")) # 输出 time.struct_time(tm_year=2017, tm_mon=5, tm_mday=16, tm_hour=17, tm_min=23, tm_sec=12, tm_wday=1, tm_yday=136, tm_isdst=-1)
三、时间转换
1. 格式化字符串 --- 时间戳
import time print("格式化字符串".center(20, '-')) t = "2017-05-16 17:23:12" print(t) print("时间元组".center(20, '-')) t1 = time.strptime(t, "%Y-%m-%d %H:%M:%S") print(t1) print("时间戳".center(20, '-')) t2 = time.mktime(t1) print(t2) # 输出 -------格式化字符串------- 2017-05-16 17:23:12 --------时间元组-------- time.struct_time(tm_year=2017, tm_mon=5, tm_mday=16, tm_hour=17, tm_min=23, tm_sec=12, tm_wday=1, tm_yday=136, tm_isdst=-1) --------时间戳--------- 1494926592.0
2. 时间戳 --- 格式化字符串
import time print("时间戳".center(20, '-')) t = time.time() print(t) print("时间元组".center(20, '-')) t1 = time.localtime(t) # 如果此处用 time.gmtime()则生成的时间元组会和本地时间有一个UTC时间差 print(t1) print("格式化字符串".center(20, '-')) t2 = time.strftime("%Y-%m-%d %X", t1) print(t2) # 输出 --------时间戳--------- 1495020952.5951612 --------时间元组-------- time.struct_time(tm_year=2017, tm_mon=5, tm_mday=17, tm_hour=19, tm_min=35, tm_sec=52, tm_wday=2, tm_yday=137, tm_isdst=0) -------格式化字符串------- 2017-05-17 19:35:52
四、datetime模块
1. datetime.datetime.now()
返回当前时间,格式如:2017-07-04 19:33:38.821027
import datetime t = datetime.datetime.now() print(t) #输出 2017-07-04 19:33:38.821027
2、datetime.date.fromtimestamp()
时间戳转换为日期格式
import time import datetime t = time.time() print(t) format_t = datetime.date.fromtimestamp(t) print(format_t) #输出 1499168293.3212767 2017-07-04
3、datetime.timedelta()
对某个时间进行加减
>>> import datetime #当前时间加3天 >>> t1 = datetime.datetime.now() + datetime.timedelta(days=3) >>> print(t1) 2017-04-03 10:42:50.714910 #当前时间减3天 >>> t1 = datetime.datetime.now() - datetime.timedelta(days=3) >>> print(t1) 2017-03-28 10:43:17.260111 #当前时间减3天 >>> t1 = datetime.datetime.now() + datetime.timedelta(days=-3) >>> print(t1) 2017-03-28 10:43:35.758742 #当前时间加3个小时 >>> t1 = datetime.datetime.now() + datetime.timedelta(hours=3) >>> print(t1) 2017-03-31 13:44:24.805354 #当前时间加30分钟 >>> t1 = datetime.datetime.now() + datetime.timedelta(minutes=30) >>> print(t1) 2017-03-31 11:14:55.990195