Python中time与datetime库的核心用法解析
本文详细解析Python中time和datetime库的基本用法。涵盖时间获取、程序计时、时间格式化及休眠等time库核心功能,并深入讲解datetime库中的date、time、datetime和timedelta四类对象。通过代码示例展示如何获取当前时间、转换时间戳、格式化输出字符串以及计算时间跨度,帮助开发者高效处理日期时间相关任务。
这是系列博客创作的第三天,作者目前大二,因专业课程涉及且个人兴趣浓厚,故深入研习。尽管起初担心无人关注,但后台浏览量的增长激励了更严谨的创作态度。本文耗时两个半小时,结合个人学习心得编写,旨在为Python初学者提供便利,同时也作为一种自我督促。
在Python语言中,处理日期和时间主要依赖内置的time库和datetime库。
理解相关术语对于掌握时间处理至关重要。
- UTC(Coordinated Universal Time,世界协调时),又称格林尼治标准时间或世界标准时间。与UTC对应的是各时区的本地时间(local time)。东N区时间比UTC早N小时,即UTC时间加N小时为东N区本地时间;西N区时间比UTC晚N小时,即UTC时间减N小时为西N区本地时间。中国位于东8区,因此比UTC早8小时,可表示为UTC+8。
- epoch time指时间计算的起点,该特定时间点在不同平台上可能不同。对于Unix系统,epoch time定义为1970-01-01 00:00:00 UTC。
- timestamp(时间戳),也称为Unix时间或POSIX时间,是一种表示从格林尼治时间1970年1月1日0时0分0秒至今所经过毫秒数的时间表示方式,其值类型为float。需注意,部分编程语言的方法返回秒数(Python即属此类),具体需参考方法文档。时间戳是一个差值,其数值与时区无关。
调用Python库主要有以下三种方式:
以time库为例,其他库的调用方式类似。
from time import * (*代表time包含所有的时间处理函数,用到某个也可单定义,调用函数时直接使用,比如:clock()) import time (调用函数方式,比如:time.clock()) import time as t (自定义库的名称,调用时方便,比如:t.clock())
time库主要包含以下三类函数:
以下面第三种库调用方式为例进行说明。
1. 时间获取:使用t.time()、t.ctime()、t.gmtime(),具体方法需根据需求选择。 2. 程序计时:使用t.clock()、t.perf_counter(),用法相同。 3. 时间格式化:使用t.strftime(format, t)和t.strptime(string, format)。其中format定义格式,t为获取的时间对象,string为字符串类型时间。 格式代码说明: %y:两位数年份(00-99) %Y:四位数年份(000-9999) %m:月份(01-12) %d:月内天数(0-31) %H:24小时制小时数(0-23) %I:12小时制小时数(01-12) %M:分钟数(00-59) %S:秒数(00-59) 4. 程序休眠:使用t.sleep()。
#使用举例
import time as t
t0=t.gmtime()
print(t0)
t1="2020-12-23 19:23:20"
t2 = t.strptime(t1,"%Y-%m-%d %H:%M:%S")
t3 = t.strftime("%y/%m/%d %H:%M:%S")
print(t2)
print(t3)
打印结果示例如下: C:\Users\86185\PycharmProjects\untitled\venv\Scripts\python.exe C:/Users/86185/PycharmProjects/untitled/Python复习/hk.py time.struct_time(tm_year=2020, tm_mon=12, tm_mday=23, tm_hour=12, tm_min=22, tm_sec=39, tm_wday=2, tm_yday=358, tm_isdst=0) time.struct_time(tm_year=2020, tm_mon=12, tm_mday=23, tm_hour=19, tm_min=23, tm_sec=20, tm_wday=2, tm_yday=358, tm_isdst=-1) 20/12/23 20:22:39
Process finished with exit code 0
time模块主要用于时间的访问和转换,提供了多种与时间相关的函数。
| 方法/属性 | 描述 |
|---|---|
| time.altzone | 返回与utc时间的时间差,以秒为单位(西区该值为正,东区该值为负)。其表示的是本地DST 时区的偏移量,只有daylight非0时才使用。 |
| time.clock() | 返回当前进程所消耗的处理器运行时间秒数(不包括sleep时间),值为小数;该方法Python3.3改成了time.process_time() |
| time.asctime([t]) | 将一个tuple或struct_time形式的时间(可以通过gmtime()和localtime()方法获取)转换为一个24个字符的时间字符串,格式为: "Fri Aug 19 11:14:16 2016"。如果参数t未提供,则取localtime()的返回值作为参数。 |
| time.ctime([secs]) | 功能同上,将一个秒数时间戳表示的时间转换为一个表示当前本地时间的字符串。如果参数secs没有提供或值为None,则取time()方法的返回值作为默认值。ctime(secs)等价于asctime(localtime(secs)) |
| time.time() | 返回时间戳(自1970-1-1 0:00:00 至今所经历的秒数) |
| time.localtime([secs]) | 返回以指定时间戳对应的本地时间的 struct_time对象(可以通过下标,也可以通过 .属性名 的方式来引用内部属性)格式 |
| time.localtime(time.time() + n*3600) | 返回n个小时后本地时间的 struct_time对象格式(可以用来实现类似crontab的功能) |
| time.gmtime([secs]) | 返回指定时间戳对应的utc时间的 struct_time对象格式(与当前本地时间差8个小时) |
| time.gmtime(time.time() + n*3600) | 返回n个小时后utc时间的 struct_time对象(可以通过 .属性名 的方式来引用内部属性)格式 |
| time.strptime(time_str, time_format_str) | 将时间字符串转换为struct_time时间对象,如:time.strptime('2017-01-13 17:07', '%Y-%m-%d %H:%M') |
| time.mktime(struct_time_instance) | 将struct_time对象实例转换成时间戳 |
| time.strftime(time_format_str[, struct_time_instance]) | 将struct_time对象实例转换成字符串,如果struct_time_instance不指定则取当前本地时间对应的time_struct对象 |
datetime库主要包含以下四类函数:
datetime库是对time库的封装,调用方式通常为import datetime as dt。
1. date:表示日期对象,使用dt.date。 2. time:表示时间对象,使用dt.time;通常不单独使用date和time函数,因为datetime函数已包含其功能。 3. datetime:表示日期时间对象,使用dt.datetime.now()获取当前时间;使用dt.strftime(format)按格式输出。 4. timedelta:主要用于定义时间跨度,例如t=dt.timedelta(hours=10)表示定义10小时的时间跨度。
使用分隔符'''进行分类展示如下:
import datetime as dt
now = dt.datetime.now() # 获取当前datetime
print(now)
输出结果:2019-05-07 16:28:07.198690
'''
d = dt.date(2020, 12, 23)
print(d)
print('year:', d.year)
print('month:', d.month)
print('day:', d.day)
输出结果:
2020-12-23
year: 2020
month: 12
day: 23
'''
'''
date1=dt.date(2020,12,23)
timedel=dt.timedelta(days=4)#表示时间跨度为4天
print('四天后的日期是:', date1+timedel)
输出结果:四天后的日期是:2020-12-27
'''
最后附带一段小程序:文本进度条打印程序分析。
import time
scale = 100 #这个可以随意设置,看需求
print("执行开始".center(scale//2,'-'))# .center(a,'b')函数是居中符,这条程序是将“执行开始”居中占字符为scale//2(可看需求自定义),b为填充符
starttime = time.clock() #time库内置函数,第一次使用是开始计时
for i in range(scale+1):
a = '*' * i #将'*'字符随i的增加而增加
b = '.' * (scale - i) #将'.'字符随‘*'增加而减少,两个字符总数是scale的初始值数量
c = (i/scale) * 100 #求百分比
t = time.clock()-starttime #计算时间,第二次调用time.clock函数表示计时结束
print("\r{:^3.0f}%[{}->{}]{:.2}s".format(c,a,b,t),end="")#字符格式化,看需求,自己玩就是咋好看咋格式化
time.sleep(0.05) #time.sleep()函数表示让程序休眠,里面参数是休眠时间根据需求随意定义
print("\n"+"执行结束".center(scale//2,'-'))#同上;"\n表示换行打印";"+"连接符,具有连接功能
关于datetime模块的datetime类将在下文详细讲解,此处简要介绍time.struct_time。
time.struct_time包含以下属性:
| 下标/索引 | 属性名称 | 描述 |
|---|---|---|
| 0 | tm_year | 年份,如 2017 |
| 1 | tm_mon | 月份,取值范围为[1, 12] |
| 2 | tm_mday | 一个月中的第几天,取值范围为[1-31] |
| 3 | tm_hour | 小时, 取值范围为[0-23] |
| 4 | tm_min | 分钟,取值范围为[0, 59] |
| 5 | tm_sec | 秒,取值范围为[0, 61] |
| 6 | tm_wday | 一个星期中的第几天,取值范围为[0-6],0表示星期一 |
| 7 | tm_yday | 一年中的第几天,取值范围为[1, 366] |
| 8 | tm_isdst | 是否为夏令时,可取值为:0 , 1 或 -1 |
属性值的获取方式有两种:
- 可将其视为一种特殊的有序不可变序列,通过下标/索引获取各元素值,例如t[0]。
- 也可通过.属性名的方式获取各元素值,例如t.tm_year。
需注意,struct_time实例的各个属性均为只读,不可修改。
至此,关于Python语言time库和datetime库基本使用的详解文章介绍完毕。如需了解更多Python time库和datetime库相关内容,请搜索本站往期文章或继续浏览相关文章,希望大家今后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









