Python datetime与time模块核心用法详解
本文详细介绍Python中datetime和time两个核心时间处理模块。涵盖timedelta时间增量、timezone时区创建、datetime与字符串的双向转换、时间戳互转、时间运算以及time模块的当前时间获取、休眠等功能,提供完整代码示例。
在Python开发中,处理日期和时间主要依赖两个内置模块:datetime和time。datetime模块提供了更高级的时间对象和操作,而time模块则侧重于底层的时间戳和格式化。了解这两个模块的功能及区别,有助于更高效地进行时间相关的编程工作。
要创建一个表示时间增量的对象,可以使用。该对象支持小时、天、秒、毫秒等参数。例如,通过指定hours=2,可以生成一个代表2小时的时间增量对象。打印该对象及其类型,可以看到其格式为“天:小时:分钟:秒”的形式,类型为datetime.timedelta。
# coding:utf-8
from datetime import timedelta
if __name__ == '__main__':
# 常用参数 hours:小时 days:天 seconds:秒 milliseconds:毫秒
delta = timedelta(hours=2)
print(delta) # 2:00:00
print(type(delta)) # <class 'datetime.timedelta'>结合,可以通过timedelta来创建时区对象。具体做法是先定义一个timedelta(如2小时),然后将其作为参数传入timezone构造函数。这样生成的时区对象(如UTC+02:00)可用于后续的时间计算,确保时间处理符合特定时区标准。
# coding:utf-8
from datetime import timedelta, timezone
if __name__ == '__main__':
delta = timedelta(hours=2)
zone = timezone(delta) #配合timedelta创建时区对象
print(zone) # UTC+02:00
print(type(zone)) # <class 'datetime.timezone'>展示了如何获取当前时间。调用datetime.now()可返回当前系统的datetime对象,包含年月日时分秒及微秒信息。若需获取特定时区的当前时间,可将之前创建的timezone对象作为参数传入,例如指定东九区时间。
datetime.now(timezone) 获取当前时间datetime对象
# coding:utf-8
from datetime import timedelta, timezone, datetime
if __name__ == '__main__':
'''
获取当前时间,可以获取指定时区的当前时间
datetime.now(timezone)
'''
now = datetime.now()
print(now) # 2022-02-23 13:59:59.224286
print(type(now)) # <class 'datetime.datetime'>
# 设置指定时区的当前时间
print(datetime.now((timezone(timedelta(hours=9))))) # 2022-02-23 14:59:59.224286+09:00将datetime对象转换为字符串时,使用方法。该方法接受一个格式化字符串fmt,其中包含%Y(年)、%m(月)、%d(日)、%H(时)、%M(分)、%S(秒)等占位符。例如,将当前时间格式化为“YYYY-MM-DD HH:MM:SS”形式,便于存储或展示。
# coding:utf-8
from datetime import datetime
if __name__ == '__main__':
'''
datetime.strftime(fmt)
将时间对象转换成字符串
fmt:格式化标准,由格式符组成
常用格式符(年:%Y,月:%m,日:%D,时:%H,分:%M,秒:%S)
'''
now = datetime.now()
print(now.strftime('%Y-%m-%d %H:%M:%S')) # 2022-02-23 14:04:24反之,将字符串解析为datetime对象需使用。此方法要求输入的字符串格式必须与提供的fmt完全匹配。若格式不匹配(如字符串缺少小时部分而fmt要求包含),则会抛出错误。正确使用时,可将指定时间的字符串转换为datetime对象,便于后续计算。
# coding:utf-8
from datetime import datetime
if __name__ == '__main__':
'''
datetime.strptime(date_string,fmt)
将字符串转换成时间对象,要求date_string的格式完全匹配fmt格式化标准
'''
time_obj = datetime.strptime('2022-2-22', '%Y-%m-%d')
# datetime.strptime('2022-2-22', '%Y-%m-%d %H') Error date_string 中不存在小时而fmt中要求有小时
print(datetime.strptime('2022-2-22 14', '%Y-%m-%d %H')) # 2022-02-22 14:00:00
print(time_obj) # 2022-02-22 00:00:00
print(type(time_obj)) # <class 'datetime.datetime'>获取当前时间的秒级时间戳(浮点数)可通过实现。该方法接收一个datetime对象,返回从1970年1月1日至今的秒数(含微秒的小数部分)。这在需要与Unix时间戳交互的场景中非常有用。
# coding:utf-8
from datetime import datetime
if __name__ == '__main__':
'''
datetime.timestamp(datetime_obj)
datetime_obj:datetime 时间对象
返回 float
'''
print(datetime.timestamp(datetime.now())) # 1645598565.715展示了如何将秒级时间戳转换回datetime对象。输入一个浮点型的时间戳t,方法返回对应的datetime对象。例如,将1645598565.715转换后,可得到具体的日期和时间,便于人类阅读或进一步处理。
# coding:utf-8
from datetime import datetime, timedelta, timezone
if __name__ == '__main__':
'''
datetime.fromtimestamp(t)
t:秒级时间戳 float类型
返回:datetime时间对象
'''
datetime_obj = datetime.fromtimestamp(1645598565.715)
print(datetime_obj) # 2022-02-23 14:42:45.715000
print(type(datetime_obj)) # <class 'datetime.datetime'>利用,可以对datetime对象进行加减运算。通过加上或减去timedelta对象,可实现时间的推移或回溯。例如,计算3小时后的时间或3小时前的时间,只需对当前datetime对象执行+或-timedelta操作即可。建议timedelta参数使用正数,以提高代码可读性。
# coding:utf-8
from datetime import datetime, timedelta, timezone
if __name__ == '__main__':
now = datetime.now()
fmt = '%Y-%m-%d %H:%M:%S'
print(now.strftime(fmt)) # 2022-02-23 15:07:01
# 3小时后时间
print((now + timedelta(hours=3)).strftime(fmt)) # 2022-02-23 18:07:01
# 3小时前时间
print((now - timedelta(hours=3)).strftime(fmt)) # 2022-02-23 12:07:01
print((now + timedelta(hours=-3)).strftime(fmt)) # 2022-02-23 12:07:01
# 建议timedelta的参数都使用正数(容易理解)time模块提供了更底层的时间处理功能,适用于需要直接操作时间戳或进行简单时间格式化的场景。与datetime相比,time模块更轻量,但功能相对基础。
展示了如何获取当前时间的秒级时间戳。调用time.time()即可返回一个浮点数,表示从1970年1月1日至今的秒数。该值包含微秒精度,常用于记录事件发生的时间点或计算程序运行耗时。
# coding:utf-8
import time
if __name__ == '__main__':
print(time.time()) # 1645667203.7236724将秒级时间戳转换为time结构体对象,可使用。若不传参数,默认使用当前时间戳;若传入特定秒数,则转换为对应时间的time.struct_time对象。该对象包含年、月、日、时、分、秒、星期、一年中的第几天及夏令时标志等详细信息。
# coding:utf-8
import time
if __name__ == '__main__':
# second 不填,则默认当前的时间戳
t = time.localtime(time.time())
t2 = time.localtime()
print(t) # time.struct_time(tm_year=2022, tm_mon=2, tm_mday=24, tm_hour=10, tm_min=10, tm_sec=8, tm_wday=3, tm_yday=55, tm_isdst=0)
print(t2) # time.struct_time(tm_year=2022, tm_mon=2, tm_mday=24, tm_hour=10, tm_min=10, tm_sec=8, tm_wday=3, tm_yday=55, tm_isdst=0)
print(type(t)) # <class 'time.struct_time'>
print(type(t2)) # <class 'time.struct_time'>将time结构体对象格式化为字符串,使用。该方法接受格式化字符串fmt和time对象(可选,默认为当前时间)。例如,将当前时间加3600秒后的时间格式化为“YYYY-MM-DD HH:MM:SS”,便于展示或日志记录。
# coding:utf-8
import time
if __name__ == '__main__':
"""
time.strftime(fmt,time_obj)
fmt:格式化标准 参考 datetime.strftime(fmt)
time_obj:time时间对象,不填默认是当前日期的time时间对象
"""
t = time.localtime(time.time() + 3600)
print(time.strftime('%Y-%m-%d %H:%M:%S')) # 2022-02-24 10:16:17
print(time.strftime('%Y-%m-%d %H:%M:%S', t)) # 2022-02-24 11:16:17展示了如何将字符串解析为time结构体对象。与datetime.strptime类似,需确保字符串格式与fmt完全匹配。例如,将“YYYY-MM-DD HH:MM:SS”格式的字符串转换为time.struct_time对象,便于进行时间计算或比较。
# coding:utf-8
import time
if __name__ == '__main__':
"""
time.strptime(time_string,fmt)
参考 datetime.strptime(date_string,fmt)
time_string:时间字符串
fmt:格式化标准
"""
fmt = '%Y-%m-%d %H:%M:%S'
t = time.strftime(fmt, time.localtime())
print(t) # 2022-02-24 10:25:17
print(time.strptime(t, fmt)) # time.struct_time(tm_year=2022, tm_mon=2, tm_mday=24, tm_hour=10, tm_min=25, tm_sec=40, tm_wday=3, tm_yday=55, tm_isdst=-1)若需让程序暂停执行一段时间,可使用。传入秒数(浮点数),程序将休眠指定时间后继续执行。这在模拟延迟、控制请求频率或测试场景中非常有用。例如,休眠2秒后再次获取时间戳,可验证休眠效果。
# coding:utf-8
import time
if __name__ == '__main__':
print(time.time()) # 1645670183.6567423
time.sleep(2)
print(time.time()) # 1645670185.6708047本文介绍了Python中datetime和time模块的核心功能与常用方法。通过实际代码示例,展示了时间对象的创建、转换、运算及格式化等关键操作。掌握这些知识,可更高效地处理Python项目中的时间相关问题。如需了解更多内容,建议查阅官方文档或参考本站其他相关文章。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













