Skip to content

datetime模块

time 模块用于取得 Unix 纪元时间戳并加以处理。但是如果要更方便的格式显示日期,或者对日期进行算术运算,应该使用 datetime 模块。

datetime 模块主要包括以下类:

类名 功能说明
datetime 日期时间对象
date 日期对象
time 时间对象
timedelta 时间间隔,即两个时间点之间的长度

datetime

datetime 模块中有自己的 datetime 类,它表示一个特定的时刻。datetime 类可以看做是 date 和 time 的合体。

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2022, 10, 12, 21, 12, 7, 215172)
>>> dt = datetime.datetime(2022, 3, 17, 18, 0, 0)
>>> dt.year, dt.month, dt.day
(2022, 3, 17)
>>> dt.hour, dt.minute, dt.second
(18, 0, 0)

Unix 纪元时间戳可以通过 datetime.datetime.fromtimestamp() 转换为 datetime 对象。该转换将根据本地时区转换。

>>> import time
>>> datetime.datetime.fromtimestamp(0)
datetime.datetime(1970, 1, 1, 8, 0)
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2022, 10, 12, 21, 14, 16, 698691)

datetime 对象可以直接用比较操作符进行比较,时间更靠后的 datetime 值更大。

timedelta

timedelta 数据类型表示一段时间,而不是一个时刻。

>>> delta = datetime.timedelta(days=11, hours=10, minutes=9, seconds=8)
>>> delta.days, delta.seconds, delta.microseconds
(11, 36548, 0)
>>> delta.total_seconds()
986948.0
>>> str(delta)
'11 days, 10:09:08'

delta 接受关键字 weeks, days, hours, minutes, seconds, milliseconds, microseconds,但是没有 year, month 关键字。在内部,它使用 days, seconds, microseconds 来保存数据。

total_seconds() 返回以 second 为单位的时间。

算术运算符可以用于对 datetime 类型的值进行日期运算。

>>> dt = datetime.datetime.now()
>>> thousandDays = datetime.timedelta(days=1000)
>>> dt + thousandDays
datetime.datetime(2025, 7, 8, 21, 21, 11, 351880)
>>> dt + thousandDays / 2
datetime.datetime(2024, 2, 24, 21, 21, 11, 351880)

将 datetime 对象转换为字符串

Unix 纪元时间戳和 datetime 对象对人类来说都不是很友好可读。利用 strftime() 方法,可以将 datetime 对象显示为字符串。( f 表示 format)。

>>> oct12st = datetime.datetime(2022, 10, 12, 21, 31, 0)
>>> oct12st.strftime('%Y-%m-%d %H:%M:%S')
'2022-10-12 21:31:00'
>>> oct12st.strftime('%I:%M %P')
'09:31 P'
>>> oct12st.strftime('%I:%M %p')
'09:31 PM'
>>> oct12st.strftime('%B of \'%y')
"October of '22"
strftime 指令 含义
%Y 带世纪的年份,2022
%y 不带世纪的年份,00 ~ 99
%m 数字表示的月份,01 ~ 22
%B 完整的月份,'November'
%b 简写的月份,'Nov'
%d 一月中的第几天,01 ~ 31
%j 一年中的第几天,001 ~ 366
%w 一周中的第几天,0(周日) ~ 6(周六)
%A 完整的周几,'Monday'
%a 简写的周几,'Mon'
%H 小时(24小时),00 ~ 23
%I 小时(12小时),01 ~ 12
%M 分钟,00 ~ 59
%S 秒,00 ~ 59
%p 'AM' 或 'PM'
%% 转义字符 %

与之相反的,strptime() 可以将字符串解析为 datetime 对象。(p 表示 parse)。

>>> datetime.datetime.strptime('October 12, 2022', '%B %d, %Y')
datetime.datetime(2022, 10, 12, 0, 0)

参考资料

本文访问

Comments