一. 时间表示方法
- 时间戳:从格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒起至现在的总秒数。
- 格式化时间字符串。
- 由 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)
对比 gmtime
和 localtime
我们发现,使用同一个时间戳,返回的时间相差 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
,0
或1
案例演示:输入出生日期,计算出生天数。
"""写一个程序,输入您的出生日期:
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]))
运行结果: