分享Python之time模块把前后两个时间戳之差显示为标准【小时:分】(H:M)时间格式的技巧

Python 之 time 模块的 time() 函数生成一组格式为 10 位数的浮点数被称之为时间戳,它是从格林威治时间 1970年1月1日 00:00:00 起至此时过去的总秒数。

1、调用time()的方法

模块名.函数名:time.time()

import time,random

def P(s, c=''): # 打印值和值的类型的自定义函数,参数 s 为打印的值,参数 c 为值的说明文字(默认为空)
    return print('{}\n值为:{}\n类型为:{}\n'.format(('' if c == '' else '\n'+c),s,type(s)))

# 取系统当前时间戳
time0 = time.time()
P(time0)

输出结果如下:
  值为:1656081341.2252388
  类型为:<class ‘float’>

附上 time 库几个常用函数和例子:

time.strptime():将特定字符串格式的时间,转换为struct_time
time.strftime():将struct_time,转换为特定字符串格式的时间

time.time():将当前时间转换为时间戳
time.mktime():将struct_time转换为时间戳,输入当地struct_time,输出格林威治时间戳

time.localtime():将时间戳转换为struct_time(当地时间)
time.gmtime():将时间戳转换为struct_time(格林威治时间)
localtime 与 gmtime 两者关系:例如,localtime 在东八区的北京时间 + 8小时(时间戳加上 8×60×60 = 28800 秒)= gmtime 在中时区的格林威治时间,换言之:格林威治时间比北京时间晚 8 个小时。

例子:
当地日期时间 current_time 的语句为:time.localtime()
值为:struct_time(tm_year=2022, tm_mon=6, tm_mday=26, tm_hour=22, tm_min=5, tm_sec=10, tm_wday=6, tm_yday=177, tm_isdst=0)
类型为:<class ‘struct_time’>

将 current_time 转换为字符串型 date 标准格式公历日期时间的语句为:time.strftime(“%Y-%m-%d %H:%M:%S”, current_time)
值为:2022-06-26 22:05:10
类型为:<class ‘str’>

将 date 转换为 timestamp 格林威治时间戳的语句为:time.time(time.strptime(date,“%Y-%m-%d %H:%M:%S”))
值为:1656252310.0
类型为:<class ‘float’>

将 timestamp 加 12 小时转换为字符串型标准格式【格林威治】公历日期时间的语句为:time.strftime(‘%Y-%m-%d %H:%M:%S’, time.gmtime(timestamp + 12×60×60))
值为:2022-06-27 02:05:10
类型为:<class ‘str’>

将 timestamp 加 12 小时转换为字符串型标准格式【当地】公历日期时间的语句为:time.strftime(“%Y-%m-%d %H:%M:%S”, time.localtime(timestamp + 12×60×60))
值为:2022-06-27 10:05:10
类型为:<class ‘str’>

如何将 date = ‘【20220203^120356】’ 等式右边数据转换为标准日期时间格式?
先转为时间戳,语句是:timestamp = time.mktime(time.strptime(date,“【%Y%m%d^%H%M%S】”))
值为:1643862236.0
类型为:<class ‘float’>
再转为标准日期时间格式,语句是:date = time.strftime(“%Y-%m-%d %H:%M:%S”, time.localtime(timestamp))
值为:2022-02-03 12:03:56
类型为:<class ‘str’>

2、通常前后两个时间戳之差是秒数之差

采用默认的10位数字时间戳单位是秒,前后两个时间戳之差是秒数之差。有人为了增加计算的精度,将时间戳扩大1000倍,以毫秒为单位计数,此时间戳变为13位数字。需要强调的“秒”转换为“毫秒”是1000倍,千万别想当然记成“分”转换“秒”的60倍,如果采用13位数字时间戳,前后两个时间戳之差就是毫秒数之差。当然,也可以通过类型变换,变成小时数之差(见本文第3条)。

# 随机延长1-10秒
time.sleep(random.uniform(1-10))
time1 = time.time()
t = time1-time0
P(t)

输出结果如下:
  值为:5.554218292236328
  类型为:<class ‘float’>

3、将时间戳之差变成标准的【小时:分】(H:M)格式的方法

【小时】取值采用 t 值除以3600取整得到,【分】取值采用 t 值除以60再用60进行模运算取整得到。最后,采用 2 位右对齐空位填 0 即 {:0>2} 得到工整的输出格式。

# 为了显示【小时:分】格式,将前边的时间戳之差 t 放大3600倍,由秒差变为小时差
t = t*60*60
P('标准时间格式:{:0>2}:{:0>2}'.format(int(t/3600),int(t/60%60)))

输出结果如下:
  标准时间格式:05:33
  类型为:<class ‘str’>
  希望以上分享对您有启发或帮助。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值