为什么用time.strftime格式化会用默认值?

a = time.time()

time.sleep(3)

b = time.time()

time_consuming = time.strftime("%H:%M:%S", time.localtime(b - a))
print(time_consuming)

用以上代码去跑time.strftime格式化时间后小时处总有个默认值,这个8小时的默认值怎么来的
clipboard.png

阅读 4.3k
3 个回答

因为时区的问题,不应该用 time,应该用 datetime.timedelta 来计算
参考下面代码

import time
import datetime

a = time.time()

time.sleep(3)

b = time.time()
print datetime.timedelta(seconds=(b -a ))  # <-- 推荐
time_consuming = time.strftime("%H:%M:%S", time.gmtime(b - a))  # <-- 不推荐
print(time_consuming)

输出如下:

0:00:03.004802
00:00:03

8 小时是时区转换导致的:北京是东八区,时间要往前加 8 小时。

新手上路,请多包涵

我搞明白了。给你个提示,把"%H:%M:%S"改为 "%Y-%m-%d %H:%M:%S" 会更加直观

b-a这是两个时间戳计算 结果是3s

但是最后print的是元组 ,转换为元组的过程中,用默认值填充了除3秒之外的其他空缺值。
默认值是1970-01-01 08:00:00 (因为时区)

所以最后print的显示会是 1970-01-01 08:00:03

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题