Python 时间相关(time模块)

使用time模块主要可以实现三种需求:获取时间、格式化时间、获取时间间隔

一、获取时间

首先掌握一个理论基础:计算机记录的时间实际是一个数字,而这个数字的开始是世界标准时间的1970年1月1日00:00:00。

time 获得时间的方法
方法说明
time.time()从世界标准时间到当前的时刻的秒数
time.localtime(seconds=None)元组形式的本地时间,不指定秒数时默认当前
time.gmtime(seconds=None)元组形式的世界统一时间,不指定秒数时默认当前
time.ctime(seconds=None)格式化的本地时间,不指定秒数时默认当前

默认输出如下:

print(time.time())
print(time.localtime())
print(time.gmtime())
print(time.ctime())


# 输出:
1665469707.2993562
time.struct_time(tm_year=2022, tm_mon=10, tm_mday=11, tm_hour=14, tm_min=28, tm_sec=27, tm_wday=1, tm_yday=284, tm_isdst=0)
time.struct_time(tm_year=2022, tm_mon=10, tm_mday=11, tm_hour=6, tm_min=28, tm_sec=27, tm_wday=1, tm_yday=284, tm_isdst=0)
Tue Oct 11 14:28:27 2022

注意看第二个和第三个时间刚好差了8小时。

我们把这个秒数传给后面三个函数,输出如下:

print(time.localtime(1665469707.2993562))
print(time.gmtime(1665469707.2993562))
print(time.ctime(1665469707.2993562))


# 输出:
time.struct_time(tm_year=2022, tm_mon=10, tm_mday=11, tm_hour=14, tm_min=28, tm_sec=27, tm_wday=1, tm_yday=284, tm_isdst=0)
time.struct_time(tm_year=2022, tm_mon=10, tm_mday=11, tm_hour=6, tm_min=28, tm_sec=27, tm_wday=1, tm_yday=284, tm_isdst=0)
Tue Oct 11 14:28:27 2022

localtime和gmtime返回的对象都是struct_time类型的,其中元组里最后三个数值的含义为

tm_wday一周的第几日0~6(0为周一,依此类推)
tm_yday一年的第几日1~366(366为闰年)
tm_isdst夏令时

1:是夏令时

0:非夏令时

-1:不确定

二、格式化时间

无论是用秒数表示的时间还是struct_time,都不是我们日常使用的时间格式。如何获得指定样式的时间?如何将时间字符串还原为时间?下面两个方法将实现以上需求。

time模块格式化时间标准
时间格式符号说明
%Y四位数的年份,0001-9999
%m月份,01-12
%d天,01-31
%H小时(24),0-23
%I小时(12),01-12
%p上下午,AM PM
%M分钟,00-59
%S秒,00-59
%B月份, January-December,小写%b为月份简写
%A周几,Monday-Sunday,小写%a为周几简写

1、时间转为指定样式的字符串

print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))

# 输出:
2022-10-11 14:50:12

当然,样式可以再中国化一点。只是有一点需要注意,格式字符串中包含中文会出现编码错误,需要设置一下类型。

import locale
locale.setlocale(locale.LC_CTYPE, 'Chinese')
print(time.strftime('%Y年%m月%d日 %H时%M分%S秒', time.localtime()))


# 输出
2022年10月11日 15时01分34秒

2、字符串类型的时间转struct_time

要点和上面一样,需要指定解析字符串时的格式字符串

print(time.strptime('2022-10-11 15:07:20', '%Y-%m-%d %H:%M:%S'))

# 输出:
time.struct_time(tm_year=2022, tm_mon=10, tm_mday=11, tm_hour=15, tm_min=7, tm_sec=20, tm_wday=1, tm_yday=284, tm_isdst=-1)

三、时间间隔

当我们想要知道一段代码执行耗时是多少,可以用以下方式

1、CPU级别的耗时,用于耗时在1秒内的精确计时

start_time = time.perf_counter()
total = 0
for i in range(100):
    total += 0
end_time = time.perf_counter()
print("耗时:{}".format(end_time-start_time))


# 输出:
耗时:8.199999999999874e-06

2、普通精度的计时

(这里如果循环还是100的话,耗时是0,时间太短)

start_time = time.time()
total = 0
for i in range(10000000):
    total += 0
end_time = time.time()
print("耗时:{}".format(end_time-start_time))


# 输出:
耗时:0.7570455074310303

3、休眠

在网络请求中用的比较多,需要人为地暂停一下程序的执行。保证访问的服务器不会受到暴力请求。

# do_something
time.sleep(0.5)
# go_on

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值