0
点赞
收藏
分享

微信扫一扫

Python 标准库模块 - time

E_topia 2021-09-28 阅读 56

一. 时间表示方法

  1. 时间戳:从格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒起至现在的总秒数。
  2. 格式化时间字符串。
  3. 由 9 个元素组成时间元组 struct_time

二. 函数使用

Python 中的 time 模块,为我们提供了非常多便利的方法,下面我们就来认识几个常用的函数吧~

localtime([secs])
将时间戳转换为当前时区的时间元组。若 secs 未提供,则以当前时间为准。

>> import time
>> time.localtime()
time.struct_time(tm_year=2021, tm_mon=8, tm_mday=18, tm_hour=23, tm_min=28, tm_sec=51, tm_wday=2, tm_yday=230, tm_isdst=0)
>> time.localtime(1629300415.4406254)
time.struct_time(tm_year=2021, tm_mon=8, tm_mday=18, tm_hour=23, tm_min=26, tm_sec=55, tm_wday=2, tm_yday=230, tm_isdst=0)

gmtime([secs])
将时间戳转换为 UTC 时区的时间元组,即 0 时区。若 secs 未提供,则以当前时间为准。

>> time.gmtime()
time.struct_time(tm_year=2021, tm_mon=8, tm_mday=18, tm_hour=15, tm_min=31, tm_sec=19, tm_wday=2, tm_yday=230, tm_isdst=0)
>> time.gmtime(1629300415.4406254)
time.struct_time(tm_year=2021, tm_mon=8, tm_mday=18, tm_hour=15, tm_min=26, tm_sec=55, tm_wday=2, tm_yday=230, tm_isdst=0)

对比 gmtimelocaltime 我们发现,使用同一个时间戳,返回的时间相差 8 小时,这是因为我们国家的标准时区为东八区~

time()
返回当前时间戳。

>> time.time()
1629300415.4406254

mktime(tuple)
将本地时间元组 local_time 或表示时间的元组 local_time[:9] 转换为时间戳。

>> local_time = time.localtime(1629300415.4406254)
>> time.mktime(local_time)
1629300415.0
>> local_time[:9]
(2021, 8, 18, 23, 26, 55, 2, 230, 0)
>> time.mktime(local_time[:9])
1629300415.0

asctime([tuple])
把时间元组或者表示时间的元组,转化为 Sun Jun 20 23:21:05 1993 格式的时间字符串。未指定 tuple 参数时,默认用 time.localtime() 的返回的时间元组。

>> time.asctime()
'Thu Aug 19 00:00:34 2021'
>> time.asctime(local_time)
'Wed Aug 18 23:26:55 2021'
>> time.asctime(local_time[:9])
'Wed Aug 18 23:26:55 2021'

ctime([secs])
把一个时间戳转换成 Sun Jun 20 23:21:05 1993 格式的时间字符串,默认用 time.time() 的时间戳。

>> time.ctime()
'Thu Aug 19 00:02:48 2021'
>> time.ctime(1629300415)
'Wed Aug 18 23:26:55 2021'

strftime(format[,t])
把时间元组或者表示时间的元组,转化为格式化的时间字符串。默认用 time.localtime() 返回的本地时间元组。

>> time.strftime('%Y-%m-%d %H:%M:%S')
'2021-08-19 00:07:18'
>> time.strftime('%Y-%m-%d %H:%M:%S', local_time)
'2021-08-18 23:26:55'
>> time.strftime('%Y-%m-%d %H:%M:%S', local_time[:9])
'2021-08-18 23:26:55'

strptime(string[, format])
把一个格式化时间字符串转化为时间元祖,是 time.strftime 的逆操作。

>> time.strptime('2021-08-18 23:26:55', '%Y-%m-%d %H:%M:%S')
time.struct_time(tm_year=2021, tm_mon=8, tm_mday=18, tm_hour=23, tm_min=26, tm_sec=55, tm_wday=2, tm_yday=230, tm_isdst=-1)

sleep(secs)
休眠多少秒。

print(time.ctime())
time.sleep(10)
print(time.ctime())

运行结果:

Thu Aug 19 00:11:43 2021
Thu Aug 19 00:11:53 2021

下面是一个综合示例演示:

import time
 
time0 = time.time()
print("当前时间戳:",time0, end='\n\n')
 
# 分别获取获取本地时间元组和UTC时间元组
local_time = time.localtime(time0)
UTC_time = time.gmtime()
print("本地时间元组:", local_time, end='\n\n')
print("世界标准时间元组:", UTC_time, end='\n\n')
 
# 将本地时间元组或表示时间的元组转换为时间戳
time1 = time.mktime(local_time)
print("将上述本地时间元组转换为时间戳:", time1, end='\n\n')
 
# 将本地时间元组或表示时间的元组转换为时间字符串
print("使用元组创建 Linux 格式的时间字符串:", time.asctime(local_time[:9]), end='\n\n')
 
# 将时间戳表示为时间字符串
print("使用时间戳创建 Linux 格式的时间字符串:", time.ctime(time0), end='\n\n')
 
# 将本地时间元组或表示时间的元组转换为格式字符串
print("使用元组创建自定义格式的时间字符串:", time.strftime("%Y-%m-%d %H:%M:%S",local_time), end='\n\n')
print("使用 time.localtime() 的返回值创建自定义格式的时间字符串:", time.strftime("%Y-%m-%d %H:%M:%S"), end='\n\n')
 
# 将时间格式字符串转换为时间元组
print("解析自定义格式的时间字符串:", time.strptime("2018-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")[:8], end='\n\n')

运行结果:

三. 时间元组简介

时间元组由 9 个整型元素组成,这九个元素从前向后依次为:

  • 四位的年,如: 1993
  • 1-12
  • 1-31
  • 0-23
  • 0-59
  • 0-59
  • 星期几 0-6,其中周一是 0
  • 元旦开始日 1-366
  • 夏令时修正时间 -1, 01

案例演示:输入出生日期,计算出生天数。

"""写一个程序,输入您的出生日期:
    1)算出您已经出生多少天?
    2)算出你出生的那天是星期几?
""" 
iimport time

born_date = input("输入出生日期(格式:YYYYMMDD)")
born_tuple = time.strptime(born_date, '%Y%m%d')

# 当前时间戳(秒数) - 出生当天时间戳(秒数)
secs = time.time() - time.mktime(born_tuple)
print("您已经出生了{}天".format(secs // (3600*24)))

# 计算出生当天是星期几
birth = time.localtime(time.mktime(born_tuple))
birth_week = birth[6]
week_dic = {
    0: "星期一",
    1: "星期二",
    2: "星期三",
    3: "星期四",
    4: "星期五",
    5: "星期六",
    6: "星期日"
}
print("您出生那天是{}".format(week_dic[birth_week]))

运行结果:


举报

相关推荐

0 条评论