Python的内置库time_python


工作中经常需要对时间进行获取,处理和格式化,我们可以使用Python内置的time库来解决这些问题。


时间戳



时间戳,表示从1970年1月1日0点0分0秒到现在的时间经过了多少秒。

import time


cur_time = time.time()
print(cur_time)


# 等待
time.sleep(3)


# 检查等待前后过去的时间
now_time = time.time()
print(now_time)
go_time = now_time - cur_time
print('等待前后过去了:{}秒!'.format(go_time))

运行结果:

1600246971.3553054
1600246974.35551
等待前后过去了:3.000204563140869秒!


格式化



time.time()的结果是浮点数对象

格式化显示本地时间:

import time
'''
格式化当前时间 年-月-日 时:分:秒
%X表示本地时间
%Y表示年,%m表示月,%d表示日
'''
print(time.strftime("%Y-%m-%d %X"))

运行结果:

2020-09-16 17:11:04


更详细的显示本地时间:

import time
'''
格式化当前时间 年-月-日 时:分:秒 上下午 星期
'''
print(time.strftime("%Y-%m-%d %X %p %A"))

运行结果:

2020-09-16 17:13:21 PM Wednesday


结构化



time.localtime()的结果是struct_time对象

结构化时间对象的9个属性分别是年月日时分秒,本月第几周,本年第几天和夏令时。

import time


sct_time = time.localtime()
print(sct_time)


# 结构化表示当地时间
# 格式为:年-月-日 时:分:秒 本月几周 本年第几天 夏令时
print('{}-{}-{} {}:{}:{} 本月第{}周 本年第{}天 夏令时:{}'.format(sct_time.tm_year,sct_time.tm_mon,sct_time.tm_mday,sct_time.tm_hour,sct_time.tm_min,sct_time.tm_sec,sct_time.tm_wday,sct_time.tm_yday,sct_time.tm_isdst))

运行结果:

2020-9-16 17:36:12 本月第2周 本年第260天 夏令时:0


相互转换



结构化时间 --> 时间戳

import time


sct_time = time.localtime()
print('当前结构化时间:{}'.format(sct_time))
# struct2format mktime
str_time = time.time()
print('当前时间戳:{}'.format(str_time))
print('转换后的时间戳:{}'.format(time.mktime(sct_time)))

运行结果:

当前结构化时间:time.struct_time(tm_year=2020, tm_mon=9, tm_mday=17, tm_hour=22, tm_min=37, tm_sec=25, tm_wday=3, tm_yday=261, tm_isdst=0)
当前时间戳:1600353445.3574238
转换后的时间戳:1600353445.0


时间戳 --> 结构化时间

import time


sct_time = time.localtime()
print('当前结构化时间:{}'.format(sct_time))
# struct2format mktime
str_time = time.time()
print('当前时间戳:{}'.format(str_time))
print('转换后的结构化时间:{}'.format(time.gmtime(str_time)))
print((time.gmtime(str_time).tm_zone))
print('转换后的结构化时间:{}'.format(time.localtime(str_time)))

运行结果:

当前结构化时间:time.struct_time(tm_year=2020, tm_mon=9, tm_mday=17, tm_hour=22, tm_min=42, tm_sec=53, tm_wday=3, tm_yday=261, tm_isdst=0)
当前时间戳:1600353773.0630054
转换后的结构化时间:time.struct_time(tm_year=2020, tm_mon=9, tm_mday=17, tm_hour=14, tm_min=42, tm_sec=53, tm_wday=3, tm_yday=261, tm_isdst=0)
UTC
转换后的结构化时间:time.struct_time(tm_year=2020, tm_mon=9, tm_mday=17, tm_hour=22, tm_min=42, tm_sec=53, tm_wday=3, tm_yday=261, tm_isdst=0)


你应该已经注意到,时间戳转换结构化时间有两个方法gmtime和localtime,其中gmtime表示标准时间,而localtime是加了时区后的时间,所以当前localtime比gmtime快8小时,这就是+8区的原因。


简单的字符串时间获取方式:

print(time.ctime())    # 当前时间的字符串形式,相当于把当前结构化时间用asctime方法格式化
print(time.asctime(time.localtime()))

结果:

Thu Sep 17 22:48:48 2020
Thu Sep 17 22:48:48 2020


datetime模块



datetime是对time模块的封装, 用起来更加简单,方便。

以下介绍几种常用的方法:

import datetime


current_time = datetime.datetime.now()
print('time:',current_time)


utc_time = datetime.datetime.utcnow()
print('utc time:',utc_time)


current_day = datetime.datetime.today()
print('local time:',current_day)


print('今年是哪一年?答:',datetime.datetime.today().year)
print('今天属于那一月?答:',datetime.datetime.today().month)
print('今天是本月第几天?答:',datetime.datetime.today().day)
print('从0001年1月1日到今天过去了多少天?答:',datetime.datetime.today().toordinal())
print('今天是礼拜几?答:',datetime.datetime.today().isoweekday())

运行结果:

time: 2020-09-17 23:10:54.315267
utc time: 2020-09-17 15:10:54.315267
local time: 2020-09-17 23:10:54.316267
今年是哪一年?答:2020
今天属于那一月?答:9
今天是本月第几天?答:17
从0001年1月1日到今天过去了多少天?答:737685
今天是礼拜几?答:4


更多用法可以查看源码进行学习。


Python的内置库time_python_02