先看几个概念:
时间戳:从1970年1月1日00:00:00开始按秒计算的偏移量。举个例子,现在是2017年6月11的下午16:54:32,那么print(time.time())输出的值是1497171320.99就代表现在的时间戳。
元组(struct_time):struct_time元组共有9个元素。gmtime(),localtime(),strptime()这三个函数会返回struct_time元组。下面的表格会列出struct_time的9个元素的具体情况
struct_time9个元素介绍
属性 | 值 |
---|---|
tm_year | 年(例如2017) |
tm_mon | 月(1-12) |
tm_mday | 日(1-31) |
tm_hour | 时(0-23) |
tm_min | 分(0-59) |
tm_sec | 秒(0-61)不太理解61 |
tm_wday | 周几(0-6)0是周日 |
tm_yday | 一年中第几天(1-366) |
tm_isdst | 是否夏令时(默认-1) |
time模块常用函数:
time.localtime([secs]):
将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
import time
#不提供参数
t=time.localtime()
print(t)
输出结果如下:
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=11, tm_hour=17, tm_min=26, tm_sec=39, tm_wday=6, tm_yday=162, tm_isdst=0)
import time
#提供参数
t=time.localtime(1497173361.52)
print(t)
dt = time.strftime("%Y-%m-%d %H:%M:%S",t)
print(dt)输出结果如下:
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=11, tm_hour=17, tm_min=29, tm_sec=21, tm_wday=6, tm_yday=162, tm_isdst=0)
2017-06-11 17:29:21
time.gmtime([secs]):
和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time,UTC时区比中国时间少8小时。
import time
t=time.gmtime()
print(t)
输出结果如下:
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=11, tm_hour=9, tm_min=33, tm_sec=17, tm_wday=6, tm_yday=162, tm_isdst=0)
time.time():
返回当前时间的时间戳。
import time
t=time.time()
print(t)
输出结果如下:
1497173705.06
time.mktime(t)
将一个struct_time转化为时间戳。
import time
t1=time.localtime()
t=time.mktime(t1)
print(t)
输出结果如下:
1497173819.0
time.strftime(format[, t]):
把一个代表时间的元组(必须是9个元素值,而且值的范围不能越界)或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。
import time
a=(2017,6,11,17,40,51,6,162,0)
#%Y %m %d %H %M %S依次代表年,月,日,时,分,秒
c=time.strftime("%Y-%m-%d %H:%M:%S",a)
print(c)
输出结果如下:
2017-06-11 17:40:51
time.strptime(string[, format])
把一个格式化时间字符串转化为struct_time。它是strftime()函数的相反操作。
import time
c=time.strptime("2017-6-11 17:51:30","%Y-%m-%d %H:%M:%S")
print(c)
输出结果如下:
time.struct_time(tm_year=2017, tm_mon=6, tm_mday=11, tm_hour=17, tm_min=51, tm_sec=30, tm_wday=6, tm_yday=162, tm_isdst=-1)
常用的输出格式化时间
格式 | 意思 |
---|---|
%Y | 年(完整的年份) |
%m | 月 |
%d | 日 |
%H | 时(24小时制) |
%M | 分 |
%S | 秒 |
%y | 年的后两位,例如今年是17年 |
%I | 第几小时(12小时制) |
%j | 一年中第几天 |
%w | 星期几(0-6,0代表星期日) |
%x | 本地日期 |
%X | 本地时间 |
%c | 本地日期和时间 |
%a | 本地简化星期名 |
%A | 本地完整星期名 |
%b | 本地简化月份名 |
%B | 本地完整月份名 |
time.sleep()函数
如果需要程序暂停一下,就调用time.sleep()函数,并且传入想要暂停的秒数。
datatime模块
import datetime
1.返回当前时间
>>> datetime.datetime.now()
datetime.datetime(2017, 5, 9, 17, 7, 0, 514481)2.时间戳转换成日期
>>> datetime.date.fromtimestamp(1178766678)
datetime.date(2007, 5, 10)
例如:对系统时间的提取:
time_unix = int(time.time()) # unix时间
print('time_unix:',time_unix)
time_win = time.localtime(time_unix) # 转换为win_time
print('time_win:',time_win)
time_now = time.strftime("%H:%M:%S", time_win) # 转换成新的时间格式(18:59:20)
print('time_now:',time_now)
list_time = []
for line in time_now.split(':'):list_time.append(line)
print('list_time:',list_time)
str_time = ''.join(list_time)
print('str_time',str_time)print('---------------------------------------------')
win_time = datetime.datetime.now().strftime('%Y%m%d')
unix_time = time.mktime(time.strptime(win_time, '%Y%m%d'))
print('win_time:',win_time)
print('unix_time:',unix_time)#输出为:
time_unix: 1536041566
time_win: time.struct_time(tm_year=2018, tm_mon=9, tm_mday=4, tm_hour=14, tm_min=12, tm_sec=46, tm_wday=1, tm_yday=247, tm_isdst=0)
time_now: 14:12:46
list_time: ['14', '12', '46']
str_time 141246
---------------------------------------------
win_time: 20180904
unix_time: 1535990400.0