在Python编程语言中,只要涉及到时间日期的操作,就会用到time模块。time模块是Python的一个标准库,是一个功能强大的模块,可以帮助我们对时间和日期进行处理。
time模块
1、time.time()函数以及格式化输出方式
time.time()函数用于返回当前时间的时间戳(格林威治时间1970年01月01日00时00分00秒起至现在的总秒数),结果是一个浮点数。例如:
动手练一练:
import time
now = time.time()
print("当前的时间戳是: %f" %now) # 输出 %f代表浮点数,默认保留小数点后6位数小数
print("当前的时间戳是: %.2f" %now) # 输出 %.2f代表浮点数,保留小数点后两位数小数
执行以上代码,输出结果为:
当前的时间戳是: 1712997758.758202
当前的时间戳是: 1712997758.76
上面的例子中,%占位符是Python程序中,经常会用到的一种占位方式,其作用是替后面的变量值占一个位置。“%f”代表浮点数格式化符号,默认保留小数点后6位数小数,“%.2f”表示保留小数点后两位数小数,如果要保留小数点后n位数小数,可以使用“%.nf”。在Python中,常见的占位符还包括“%d”和“%s”。“%d”是用作整数的占位符,“%s”被用作字符串的占位符,例如:
动手练一练:
name = "张三"
age = 20
print("你好,我叫%s" % name) # 输出 你好,我叫张三
print("我今年%d岁" % age) # 输出 我今年20岁
print("你好,我叫%s,我今年%d岁" % (name, age)) # 输出 你好,我叫张三,我今年20岁
执行以上代码,输出结果为:
你好,我叫张三
我今年20岁
你好,我叫张三,我今年20岁
上面的例子中,如果在同一个字符串中插入多个值,可以使用括号“()”来指定这些值,然后用“,”来分隔它们。尽管%占位符是有效的,但在Python 3.6之后,建议使用新的格式化方式,例如:
动手练一练:
name = "张三"
age = 20
print(f"你好,我叫{name},我今年{age}岁") # 输出 你好,我叫张三,我今年20岁
执行以上代码,输出结果为:
你好,我叫张三,我今年20岁
上面的例子中,这种新的字符串格式化方式更简洁,更易读。这里需要注意的是,print(f"{}")中字符串前面必须有一个“f”,并且“f”后面一定要紧跟字符串,不能隔有空格,否则会报错。
2、time.localtime()函数
time.localtime()函数是Python中用于获取当前时间的函数之一。它返回一个代表当前本地时间的struct_time对象,是一个包含了年、月、日、时、分、秒等时间信息的结构化时间元组。time.localtime()函数有一个参数用于接收时间戳,如果调用函数时不提供时间戳,则默认会使用当前时间戳。例如:
动手练一练:
import time
print("当前时间",time.localtime())
print("时间戳为0对应的时间",time.localtime(0))
执行以上代码,输出结果为:
当前时间 time.struct_time(tm_year=2024, tm_mon=4, tm_mday=13, tm_hour=17, tm_min=37, tm_sec=44, tm_wday=5, tm_yday=104, tm_isdst=0)
时间戳为0对应的时间 time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
这里需要注意的是,time.localtime(0)这个表达式并不会获取当前时间,而是会把0作为时间戳,并转换为当前时区的时间元组(time.struct_time)。time.localtime(0) 实际上是获取1970年1月1日00:00:00的本地时区时间。由于中国的标准时间比格林威治时间快8个小时,所以输出“tm_hour=8”。
3、time.mktime()函数
time.mktime()函数与localtime()函数相反,可以将一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回的结构化时间元组)转化为时间戳,返回用秒数表示时间的浮点数。
动手练一练:
import time
t = (2024,4,13,17,37,44,5,104,0)
s = time.mktime(t)
print("time.mktime(t)的时间戳是: %f" % s)
print("time.mktime(time.localtime(s))的时间戳是: %f" % time.mktime(time.localtime(s)))
执行以上代码,输出结果为:
time.mktime(t)的时间戳是: 1713001064.000000
time.mktime(time.localtime(s))的时间戳是: 1713001064.000000
上面的例子中,time.mktime()函数可以使用时间元组作为参数,也可以使用time.localtime()返回的结构化时间元组作为参数。
4、time.gmtime()函数
time.gmtime(时间戳)可以把获取的时间戳转为UTC时间(0时区)格林威治时间元组,如果不传入参数,默认为当前时间戳。例如:
动手练一练:
import time
print("time.gmtime(): ",time.gmtime())
print("time.gmtime(0)",time.gmtime(0))
print("-------这是虚线-------")
print("time.localtime():",time.localtime())
print("time.localtime(0):",time.localtime(0))
执行以上代码,输出结果为:
time.gmtime(): time.struct_time(tm_year=2024, tm_mon=4, tm_mday=13, tm_hour=11, tm_min=11, tm_sec=57, tm_wday=5, tm_yday=104, tm_isdst=0)
time.gmtime(0) time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
-------这是虚线-------
time.localtime(): time.struct_time(tm_year=2024, tm_mon=4, tm_mday=13, tm_hour=19, tm_min=11, tm_sec=57, tm_wday=5, tm_yday=104, tm_isdst=0)
time.localtime(0): time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
上面的例子中,gmtime()返回UTC时间(格林威治时间),localtime()返回北京时间,所以两者相差8小时。
5、time.asctime()函数
time.asctime()函数可以把一个时间元组转换为“Mon Mar 22 12:33:32 2020”这种形式的24个字符格式化时间字符串,也就是生成固定格式的时间表示格式。time.asctime()函数如果没有传入参数,则默认将time.localtime()作为参数。例如:
动手练一练:
import time
t = (2020,3,22,12,33,32,7,106,0)
print("time.asctime(t): ",time.asctime(t))
print("time.asctime(): ",time.asctime())
print("time.asctime(time.localtime()): ",time.asctime(time.localtime()))
执行以上代码,输出结果为:
time.asctime(t): Mon Mar 22 12:33:32 2020
time.asctime(): Sat Apr 13 20:01:56 2024
time.asctime(time.localtime()): Sat Apr 13 20:01:56 2024
6、time.ctime()函数
time.ctime()函数可以把一个时间戳(按秒计算的浮点数)转化为格式化时间字符串,它接受一个时间戳作为参数,并返回一个表示该时间戳的可读字符串。time.ctime()函数如果没有传入参数,则默认使用time.time()作为参数。例如:
动手练一练:
import time
print("time.ctime(): %s" % time.ctime())
print("time.ctime(time.time(): %s" % time.ctime(time.time()))
print("time.ctime(0): %s" % time.ctime(0))
执行以上代码,输出结果为:
time.ctime(): Sat Apr 13 20:13:36 2024
time.ctime(time.time(): Sat Apr 13 20:13:36 2024
time.ctime(0): Thu Jan 1 08:00:00 1970
7、time.sleep()函数
time.sleep()函数是time模块中最常用的方法之一,可以让程序暂停执行一段时间。在Python程序开发中,当我们需要模拟实时操作,或者在程序中插入一定的延时后再执行下一步操作时,就可以使用time.sleep()函数。例如:
动手练一练:
import time
print("开始时间: %s" % time.ctime())
time.sleep(10)
print("结束时间: %s" % time.ctime())
执行以上代码,输出结果为:
开始时间: Sat Apr 13 20:29:02 2024
结束时间: Sat Apr 13 20:29:12 2024
运行以上代码,首先会输出“开始时间: Sat Apr 13 20:29:02 2024”,程序暂停10秒后会再次输出“结束时间: Sat Apr 13 20:29:12 2024”,开始时间和结束时间刚好相差10秒。
8、time.strftime()函数
time.strftime()函数可以把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。例如:
动手练一练:
import time
t = (2024,3,26,12,33,32,7,106,0)
print(time.strftime("%y/%b/%d %H:%M:%S", t))
print(time.strftime("%Y-%m-%d %x", time.localtime()))
执行以上代码,输出结果为:
24/Mar/26 12:33:32
2024-04-13 04/13/24
Python中时间日期格式化符号如下表所示,注意大小写的区别:
符号 | 含义 |
---|---|
%y | 两位数的年份表示(00-99) |
%Y | 四位数的年份表示(000-9999) |
%m | 月份(01-12) |
%d | 月内中的一天(0-31) |
%H | 24小时制小时数(0-23) |
%h | 月份的英文缩写 |
%I | 12小时制小时数(01-12) |
%M | 分钟数(00-59) |
%S | 秒(00-59) |
%a | 本地简化星期名称 |
%A | 本地完整星期名称 |
%b | 本地简化的月份名称 |
%B | 本地完整的月份名称 |
%c | 本地相应的日期表示和时间表示 |
%j | 年内的一天(001-366) |
%p | 本地A.M.或P.M.的等价符 |
%U | 一年中的星期数(00-53)星期天为星期的开始 |
%w | 星期(0-6),星期天为星期的开始,0是星期天 |
%W | 一年中的星期数(00-53)星期一为星期的开始 |
%x | 本地相应的日期表示 |
%X | 本地相应的时间表示 |
%Z | 当前时区的名称 |
%% | %号本身 |
9、time.strptime()函数
time.strptime()函数和time.strftime()函数相反,能够根据指定的格式把一个时间字符串解析为时间元组(struct_time对象)。
动手练一练:
import time
struct_time = time.strptime("Mar 26 2020 21:09:56", "%b %d %Y %H:%M:%S")
print("返回的元组:",struct_time)
执行以上代码,输出结果为:
返回的元组: time.struct_time(tm_year=2020, tm_mon=3, tm_mday=26, tm_hour=21, tm_min=9, tm_sec=56, tm_wday=3, tm_yday=86, tm_isdst=-1)
这里需要注意的是,strptime()提供的字符串要和格式化符号的格式一一对应,如果字符串中日期间使用“-”分隔,格式化符号中也必须使用“-”分隔,时间中使用冒号“:”分隔,后面也必须使用冒号分隔,否则会报格式不匹配的错误。