Python Package:datetime

Posted on Tue, 09 Sep 2025 11:13:45 +0800 by LiangMingJian


概述

标准库

datetime 是 Python 中提供日期处理的一个模块,通过该模块可以完成诸如日期格式化,时间格式化,日期计算等功能。

datetime 模块的组成主要包括 datetime,date,time 这 3 个对象以及一个 timedelta 对象。

此外,在 Python 中,操作时间的模块除了 datetime 模块外,还有 time(更多用于时间戳处理)这个模块供开发者使用。

time 模块的使用可查阅另外一篇文章:Python Package:time

datetime 对象

datetime 对象是一个包含年月日,时分秒信息的对象,支持通过点式访问包括 year,month,day,hour,minute,second,microsecond 在内的数据。

构造 datetime 对象

from datetime import datetime

# 按顺序传入年月日,时分秒,(毫秒,时区)
date1 = datetime(2025, 12, 31, 10, 10, 10)  
print(date1)
# 2025-12-31 10:10:10

获取当前完整日期时间

通过类方法 today()now() 获取当前的年月日,时分秒,毫秒信息。

其中 now() 支持携带时区参数 tz,today() 不支持

from datetime import datetime
from datetime import timezone
  
# 获取当前时间  
date1 = datetime.now()  
date2 = datetime.today()  
  
print(date1)  # 2025-09-09 11:24:34.755896  
print(date1.microsecond)  # 755896  
print(date2)  # 2025-09-09 11:24:34.755896  
  
# 获取指定时区的当前时间  
date3 = datetime.now(tz=timezone.utc)  
print(date3)  # 2025-09-09 03:30:01.321534+00:00

从时间戳获取日期时间

通过类方法 fromtimestamp() 传入时间戳和时区数据可以将时间戳按指定的时区转换为标准的 datetime 日期对象。

特别的,当时区数据不传入时,默认以当前本地时区为格式转换。

from datetime import datetime
from datetime import timezone 

# Asia/Shanghai 中国时区 2025-01-01
timestamp = 1735660800  

# 以本地系统时区转换(中国时区)
date1 = datetime.fromtimestamp(timestamp)  
print(date1)  
# 2025-01-01 00:00:00

# 以 UTC 时区转换(比中国时间晚 8 小时)
date2 = datetime.fromtimestamp(timestamp, tz=timezone.utc)
print(date2)
# 2024-12-31 16:00:00+00:00

将时间转换为时间戳

通过类方法 timestamp() 可以获取 datetime 对象的时间戳数据。

from datetime import datetime 

date1 = datetime(2025, 1, 1, 0, 0, 0)  
print(date1.timestamp())

获取星期(周)数据

datetime 对象支持使用 isocalendar()(返回年,周次,周天),isoweekday()(周天,周一为 1),weekday()(周天,周一为 0)等方法返回周数据。

from datetime import datetime

date1 = datetime(2025, 1, 1, 0, 0, 0)  
print(date1.isocalendar())  # (year=2025, week=1, weekday=3)
print(date1.isoweekday())  # 3
print(date1.weekday())    # 2

格式化输出和格式化转换

datetime 对象支持以字符串形式格式化输出,也支持从格式化的字符串中转换。

from datetime import datetime

# 格式化输出
date1 = datetime.today()  
print(date1.strftime("%Y-%m-%d %H:%M:%S"))  
# 2025-09-09 11:44:25

# 格式化转换
date2 = datetime.strptime("2025-01-01 00:00:00", 
						  "%Y-%m-%d %H:%M:%S")  
print(date2)
# 2025-01-01 00:00:00

strftime() 常用格式有:%Y(年),%m(月),%d(日),%H(24 小时制),%I(12 小时制),%M(分钟),%S(秒),%f(微秒)

strftime() 所有支持格式可查阅 strftime 和 strptime 格式码文档

date 对象

date 对象是 datetime 对象中年月日部分的内容。

date 对象的使用与 datetime 对象基本一致,只是 date 对象存储的数据只有年月日,不包括时分秒,以及时区。

构造 date 对象

from datetime import date

date1 = date(2025, 1, 1)  
print(date1)
# 2025-01-01

获取当前年月日

from datetime import date  

# 获取当前年月日
date1 = date.today()  
print(date1)       # 2025-09-09
print(date1.year)  # 2025

从时间戳获取年月日

与 datetime 对象不同,date 的 fromtimestamp() 方法没有时区设置功能。

from datetime import date  
  
# Asia/Shanghai 中国时区 2025-01-01
timestamp = 1735660800  
  
# 以本地系统时区转换(中国时区)(没有时区设置功能)  
date1 = date.fromtimestamp(timestamp)  
print(date1)  
# 2025-01-01

格式化输出

与 datetime 对象不同,date 只支持格式化输出 strftime() 方法。

from datetime import date  
  
# 格式化输出  
date1 = date.today()  
print(date1.strftime("%Y-%m-%d"))  
# 2025-09-09

time 对象

time 对象是 datetime 对象的时分秒部分,但与 date 对象不同,time 对象没有过多的功能,更多只是作为一个对象使用。

构造 time 对象

from datetime import time  

# 构造时间 10:10:10
time1 = time(10,10,10)  
print(time1)
# 10:10:10

格式化输出

from datetime import date  
  
# 格式化输出  
time1 = time(10,10,10)
print(time1.strftime("%H:%M:%S"))  
# 10:10:10

合并 time 对象和 date 对象

from datetime import datetime, date, time  
  
date1 = date(2025, 10, 10)  
time1 = time(10, 10, 10)  

# 合并 time 对象与 date 对象
datetime1 = datetime.combine(date1, time1)  
print(datetime1)
# 2025-10-10 10:10:10

timedelta 对象

在 datetime 模块中,最具特色的一点在于 datetime 对象和 date 对象是支持计算的。 datetime 对象和 date 对象计算的结果就是 timedelta 对象(datetime 对象与 date 对象支持的计算基本一致,下文以 datetime 对象为例)。

构造 timedelta 对象

class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

timedelta 对象支持传入天,秒,毫秒,微秒,分,时,周进行构造,但只有天,秒,毫秒会被存储,其他传入数据会自动换算为毫秒,秒,天进行存储。

from datetime import timedelta

delta = timedelta(
    days=50,
    seconds=27,
    microseconds=10,
    milliseconds=29000,
    minutes=5,
    hours=8,
    weeks=2
)
print(delta)
# datetime.timedelta(days=64, seconds=29156, microseconds=10)

timedelta 对象的运算

timedelta 对象支持与 timedelta 对象计算,常用的运算有:

运算功能
t1 = t2 + t3和运算
t1 = t2 - t3差运算
t1 = t2 * i乘运算
t1 = t2 * f浮点乘运算,结果四舍五入
f = t2 / t3除运算,结果是一个浮点数。
t1 = t2 / f浮点除运算,结果四舍五入

与 datetime 进行计算

通过构造 timedelta 对象可以与 datetime 进行相加相减计算,用以求指定日期后多少天,或前多少天。

datetime 对象支持的对象有:

运算功能
timedelta = datetime1 - datetime2间隔计算
datetime2 = datetime1 + timedelta间隔加
datetime2 = datetime1 - timedelta间隔减
datetime1 ==/!= datetime2相等比较
datetime1 </<=/>/>= datetime2先后比较

————————————

datetime — 基本日期和时间类型