文章目录
- 前言
- 一、日期与时间的基本概念
- 二、时间戳
- 1.概念
- 2.形成过程
- 三、Python的时间格式化符号
- 四、时间元组
- 1.时间元组:
- 2.struct_time元组的属性
- 五、time库可以干什么
- 总结
前言
大家好呀,BOBO仔回来啦。
说实话,这几天我们学习面向对象的编程理念,着实有点伤脑筋。ok,接下来的这几章节,就让你可怜的神经放松一下!
一、日期与时间的基本概念
时间,不论在生活中还是工作中,都至关重要,我们每时每刻都要与时间time打交道。
但是,当time变成了Python里的模块,那么…
有趣!太有趣啦!
这一期,我主要来讲讲time库的基本概念。
二、时间戳
1.概念
时间戳(timestamp),是指指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数 。通俗的讲,时间戳是一个能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。他的提出为用户提出了一份电子数据,以证明用户某些数据的产生时间。
在实际应用上,他可以使用在包括“电子商务”,“金融活动”的各个方面,尤其可以用来支撑公开的秘钥基础设施的“不可否然”的服务。
上面的时间戳的概述是不是有点。。。抽象? 没事,大家就可以把他理解为一个经加密形成的凭证文档,而且他包括三个部分。
1.需加时间戳的文件的摘要
2.DTS(Decode Time Stamp,解码时间戳)收到文件的日期与时间
3.DTS的数据签名
噢,是不是想起了一些记忆中的画面?
哇,是不是好严谨?难怪能用来保护金融文件。
2.形成过程
从这几张简图来看,时间戳的形成好像还挺简单的…
嘿嘿,其实不然。
时间戳由于其本身的重要性,因此往往不能那么的小儿科。时间戳在形成是会考虑到多种因素,如会不会丢失,会不会被非法篡改等等。
怎么样,档次感是不是直接飙升?
但不过也要注意,书面签署文件的时间是由签署人自己写上的,而数字时间戳不然。它是由认证单位DTS加的,用DTS收到的时间为依据。
【注:以上内容为网络资料与个人了解,如有问题敬请指出!!!】
三、Python的时间格式化符号
Python中会用一些特殊的符号来格式化时间日期,类似于字符串格式化中的“%s”,“%d”等等。
比如,这里我会罗列一点。
%Y:4位数年份,例如2025
%m:2位数月份(01到12)
%d:2位数日期(01到31)
%H:2位数小时(00到23,24小时制)
%M:2位数分钟(00到59)
%S:2位数秒(00到59)
%f:微秒(000000到999999)
%a:本地简化星期名称,例如Mon
%A:本地完整星期名称,例如Monday
%b:本地简化月份名称,例如Jan
%B:本地完整月份名称,例如January
%c:本地相应的日期表示和时间表示
%I:2位数小时(01到12,12小时制)
%p:本地am或pm的相应符
%j:一年中的第几天(001到366)
%U:一年中的第几周(00到53,星期天是一个星期的开始)
%w:一个星期中的第几天(0到6,星期天是0)
%W:一年中的第几周(00到53,星期一是一个星期的开始)
%x:本地相应的日期表示
%X:本地相应的时间表示
%Z:当前时区的名称
%%:一个字面上的百分号
啊。。。好难背。。。
怎么办呢?这么多。。。
没事,我这里有两个秘方:
第一,也是最省力的:
收藏我的文章!!!保证不会忘!!!
第二个方法,就是我后面会讲的,用函数,时间time库函数,
毕竟,对于我这种懒蛋来说,打个百分号都嫌烦。。。
好,言归正传。
如果大家觉得有点抽象,我可以举个例子
比如我想输出类似于"2025-01-20 12:34:56"的字符串(具体会随着时间变化)
python">from datetime import datetimenow = datetime.now()
formatted_now = now.strftime("%Y-%m-%d %H:%M:%S")
print(formatted_now)
大家运行一下,会看到如下画面:
哈!和我输入的时刻一毛一样!!!
当然,大家也不要慌张。
在第三十一章,我会给大家好好讲讲怎么用函数来完成这些任务。
四、时间元组
这部分内容有点复杂,大家自行理解
1.时间元组:
这种结构具有如下属性:
在Python中,时间元组(time tuple)是一个包含九个元素的元组,它表示一个时间点,并且通常与time模块中的函数一起使用。这个元组按照以下顺序包含以下元素:
年(4位数,例如2025)
月(1到12)
日(1到31)
小时(0到23)
分钟(0到59)
秒(0到61,包括闰秒)
一周中的第几天(0到6,0表示星期一)
一年中的第几天(1到366)
是否是夏令时(-1, 0, 1;-1表示不确定,0表示不是夏令时,1表示是夏令时)
上述就是struct_time元组(即time.struct_time对象)
时间元组通常用于将时间戳转换为可读的时间格式,或者将时间格式转换为时间戳。在time模块中,有几个函数可以处理时间元组,比如time.localtime()、time.gmtime()和time.strptime()。
这里我举个例子:
python">import time# 获取当前本地时间的时间元组
local_time_tuple = time.localtime()
print("Local time tuple:", local_time_tuple)# 获取当前UTC时间的时间元组
utc_time_tuple = time.gmtime()
print("UTC time tuple:", utc_time_tuple)# 将一个时间字符串解析为时间元组
time_string = "2025-01-20 12:34:56"
parsed_time_tuple = time.strptime(time_string, "%Y-%m-%d %H:%M:%S")
print("Parsed time tuple:", parsed_time_tuple)# 注意:strptime() 返回的时间元组不包含夏令时信息,因此它只有8个元素。
# 如果你需要夏令时信息,你可能需要使用其他方法或库来获取。# 将时间元组转换为时间戳
timestamp = time.mktime(local_time_tuple)
print("Timestamp:", timestamp)# 将时间戳转换为本地时间的时间元组
local_time_from_timestamp = time.localtime(timestamp)
print("Local time from timestamp:", local_time_from_timestamp)
2.struct_time元组的属性
在Python中,struct_time元组是time模块中的一个数据类型,用于表示时间。这个元组有9个属性,每个属性都对应一个特定的时间组成部分。以下是struct_time元组的属性及其含义:
tm_year:年份,例如2025。
tm_mon:月份,范围是1到12,其中1代表1月。
tm_mday:日期,即一个月中的第几天,范围是1到31。
tm_hour:小时,范围是0到23,其中0代表午夜。
tm_min:分钟,范围是0到59。
tm_sec:秒,范围是0到61(包括闰秒)。
tm_wday:星期几,范围是0到6,其中0代表星期一。
tm_yday:一年中的第几天,范围是1到366(考虑到闰年)。
tm_isdst:是否是夏令时,1表示是夏令时,-1表示未知,0表示不是夏令时。
struct_time对象通常是通过time.localtime(), time.gmtime(), 或 time.strptime()等函数返回的。这些函数将时间信息解析为struct_time元组,使得可以方便地访问时间的各个组成部分。
例如,使用time.localtime()函数获取当前本地时间,并访问其各个属性:
python">import time# 获取当前本地时间
current_time = time.localtime()# 访问struct_time的各个属性
print("年份:", current_time.tm_year)
print("月份:", current_time.tm_mon)
print("日期:", current_time.tm_mday)
print("小时:", current_time.tm_hour)
print("分钟:", current_time.tm_min)
print("秒:", current_time.tm_sec)
print("星期几:", current_time.tm_wday) # 0=星期一, 1=星期二, ...
print("一年中的第几天:", current_time.tm_yday)
print("是否是夏令时:", current_time.tm_isdst)
这样,你就能很方便地获取并处理信息了
(哇,泰裤辣…)
五、time库可以干什么
time库,就是Python中掌管时间的神。
玩过游戏的都知道,这一点有多重要。
或者,我们的电子时间,也可以用这种程序做出来
比如,我们做一个电子秒表,从00:00:00开始计时,我们的代码可以像这样写:
python">import timedef electronic_stopwatch():start_time = time.time() # 获取开始时间的时间戳try:while True:# 计算从开始到现在经过的秒数elapsed_time = time.time() - start_time# 将秒数转换为小时、分钟和秒hours, remainder = divmod(elapsed_time, 3600)minutes, seconds = divmod(remainder, 60)# 格式化输出,确保小时、分钟和秒都是两位数formatted_time = f"{int(hours):02}:{int(minutes):02}:{int(seconds):02}"# 打印当前时间,并刷新输出(在大多数终端中,\r会将光标移回行首)print(f"\r电子秒表: {formatted_time}", end="")# 等待一秒再更新time.sleep(1)except KeyboardInterrupt:# 当用户按下Ctrl+C时,退出循环print("\n秒表已停止。")# 调用函数开始秒表
electronic_stopwatch()
输出就像这样:
00:00:02
00:00:08
00:01:32
amazing~~~
这就是time库的具体应用了
不过,我们在写这段代码的时候,看似输出非常简单,实际上要充分的应用到我们之前讲的几乎是每一个知识点,如函数封装、面向对象、字符串format格式以及while循环。
雕虫小技!
当然,他也能倒计时
这里我用倒计时10秒
python">import timedef countdown(seconds):try:while seconds > 0:mins, secs = divmod(seconds, 60)timeformat = '{:02d}:{:02d}'.format(mins, secs)print(f"\r倒计时: {timeformat}", end="")time.sleep(1)seconds -= 1print("\n倒计时结束!")except KeyboardInterrupt:print("\n倒计时被中断。")# 设置倒计时的秒数
countdown_seconds = 10# 调用倒计时函数
countdown(countdown_seconds)
22行代码,拿下!!!
(菜鸟kk:有点多。。。)
总结
今天,我们研究了Python时间概念编程的基础,都是一些比较基础、琐碎的东西,还没有涉及到函数以及太难的代码应用。
(呵呵,刚刚的eg不算)
好了,最后的最后——
看在我叫你们2块超级代码应用的份上…
制作不易!一圈三连,点个关注呗~~~
下期我们会深入学习time库的指令,敬请期待,bye~~~