Python datetime 模块

Python datetime 模块

Python datetime 模块

Python 的 datetime 模块是用于处理日期和时间的标准库模块。它提供了多种类和函数,可以帮助我们轻松地处理日期、时间、时间差等操作。无论是获取当前时间、格式化日期,还是计算时间差,datetime 模块都能胜任。

datetime 模块的核心类

datetime 模块中包含了以下几个核心类:

date 类 - date 类用于表示日期,包含年、月、日三个属性。

time 类 - time 类用于表示时间,包含时、分、秒、微秒等属性。

datetime 类 -datetime 类是 date 和 time 的结合体,可以同时表示日期和时间。

timedelta 类 - timedelta 类用于表示时间差,可以用于日期和时间的加减操作。

使用 datetime 模块

获取当前日期和时间

我们可以使用 datetime 类的 now() 方法来获取当前的日期和时间。

实例

from datetime import datetime

# 获取当前日期和时间

now = datetime.now()

print("当前时间:", now)

输出示例:

当前时间: 2025-04-22 14:30:45.123456

创建特定的日期和时间

我们可以通过 datetime 类的构造函数来创建特定的日期和时间。

实例

from datetime import datetime

# 创建特定的日期和时间

specific_time = datetime(2025, 4, 22, 15, 30, 0)

print("特定时间:", specific_time)

输出示例:

特定时间: 2025-04-22 15:30:00

格式化日期和时间

datetime 对象可以通过 strftime() 方法格式化为字符串。

实例

from datetime import datetime

# 获取当前时间

now = datetime.now()

# 格式化输出

formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")

print("格式化时间:", formatted_time)

输出示例:

格式化时间: 2025-04-22 14:30:45

计算时间差

timedelta 类可以用于计算两个日期或时间之间的差值。

实例

from datetime import datetime, timedelta

# 获取当前时间

now = datetime.now()

# 计算 10 天后的时间

future_time = now + timedelta(days=10)

print("10 天后的时间:", future_time)

输出示例:

10 天后的时间: 2025-05-02 14:30:45.123456

常见应用场景

计算两个日期之间的天数

实例

from datetime import date

# 创建两个日期

date1 = date(2025, 4, 22)

date2 = date(2025, 5, 1)

# 计算天数差

delta = date2 - date1

print("两个日期之间的天数差:", delta.days)

输出示例:

两个日期之间的天数差: 9

处理时区

datetime 模块本身不直接支持时区操作,但可以通过 pytz 库来处理时区。

实例

from datetime import datetime

import pytz

# 获取当前时间并设置时区

now = datetime.now(pytz.timezone('Asia/Shanghai'))

print("上海当前时间:", now)

输出示例:

上海当前时间: 2025-04-22 14:30:45.123456+08:00

常用类、方法及属性

1. 核心类

说明

示例

datetime.date

日期类(年、月、日)

date(2023, 5, 15)

datetime.time

时间类(时、分、秒、微秒)

time(14, 30, 0)

datetime.datetime

日期时间类(包含日期和时间)

datetime(2023, 5, 15, 14, 30)

datetime.timedelta

时间间隔类(用于日期/时间计算)

timedelta(days=5)

datetime.tzinfo

时区信息基类(需子类化实现)

自定义时区类

2. date 对象常用方法/属性

方法/属性

说明

示例

date.today()

返回当前本地日期

date.today() → date(2023, 5, 15)

date.fromisoformat(str)

从 YYYY-MM-DD 字符串解析日期

date.fromisoformat("2023-05-15")

date.year

年份(只读)

d.year → 2023

date.month

月份(1-12,只读)

d.month → 5

date.day

日(1-31,只读)

d.day → 15

date.weekday()

返回星期几(0=周一,6=周日)

d.weekday() → 0

date.isoformat()

返回 YYYY-MM-DD 格式字符串

d.isoformat() → "2023-05-15"

date.strftime(format)

自定义格式化输出

d.strftime("%Y/%m/%d") → "2023/05/15"

3. time 对象常用方法/属性

方法/属性

说明

示例

time.hour

小时(0-23,只读)

t.hour → 14

time.minute

分钟(0-59,只读)

t.minute → 30

time.second

秒(0-59,只读)

t.second → 0

time.microsecond

微秒(0-999999,只读)

t.microsecond → 0

time.isoformat()

返回 HH:MM:SS.mmmmmm 格式字符串

t.isoformat() → "14:30:00"

time.strftime(format)

自定义格式化输出

t.strftime("%H:%M") → "14:30"

4. datetime 对象常用方法/属性

方法/属性

说明

示例

datetime.now()

返回当前本地日期时间

datetime.now() → datetime(2023, 5, 15, 14, 30, 0)

datetime.utcnow()

返回当前 UTC 日期时间

datetime.utcnow()

datetime.fromtimestamp(ts)

从时间戳创建 datetime 对象

datetime.fromtimestamp(1684146600)

datetime.timestamp()

返回时间戳(浮点数秒)

dt.timestamp() → 1684146600.0

datetime.date()

提取日期部分

dt.date() → date(2023, 5, 15)

datetime.time()

提取时间部分

dt.time() → time(14, 30)

datetime.year

年份(同 date)

dt.year → 2023

datetime.strftime(format)

自定义格式化输出

dt.strftime("%Y-%m-%d %H:%M") → "2023-05-15 14:30"

5. timedelta 对象常用属性

属性

说明

示例

days

天数(可正可负)

delta.days → 5

seconds

秒数(0-86399)

delta.seconds → 3600(1小时)

microseconds

微秒数(0-999999)

delta.microseconds → 0

6. 常用格式化符号(strftime)

符号

说明

示例输出

%Y

四位年份

2023

%m

两位月份(01-12)

05

%d

两位日(01-31)

15

%H

24小时制小时(00-23)

14

%M

分钟(00-59)

30

%S

秒(00-59)

00

%A

完整星期名

Monday

%a

缩写星期名

Mon

%B

完整月份名

May

%b

缩写月份名

May

实例

1. 计算日期差

实例

from datetime import date, timedelta

d1 = date(2023, 5, 15)

d2 = date(2023, 6, 1)

delta = d2 - d1 # 返回 timedelta 对象

print(delta.days) # 输出: 17

2. 时间加减

实例

from datetime import datetime, timedelta

now = datetime.now()

future = now + timedelta(days=3, hours=2)

print(future.strftime("%Y-%m-%d %H:%M"))

3. 时区转换(需安装 pytz)

实例

from datetime import datetime

import pytz

utc_time = datetime.utcnow().replace(tzinfo=pytz.utc)

beijing_time = utc_time.astimezone(pytz.timezone("Asia/Shanghai"))

print(beijing_time)

4. 解析字符串

实例

from datetime import datetime

dt = datetime.strptime("2023-05-15 14:30", "%Y-%m-%d %H:%M")

print(dt.year) # 输出: 2023

注意事项

不可变性:所有 datetime 对象不可变,操作会返回新对象。

时区处理:原生 datetime 无时区支持,需用 pytz 或 Python 3.9+ 的 zoneinfo。

性能:频繁创建对象可能影响性能,考虑重用或缓存。

边界检查:非法日期(如 date(2023, 2, 30))会触发 ValueError。

相关文章

中铁银通卡在哪里办理 中铁银通卡怎么注销
28365365体育投注

中铁银通卡在哪里办理 中铁银通卡怎么注销

📅 07-24 👁️ 5918
从源码编译安装 GCC 10.1.0
28365365体育投注

从源码编译安装 GCC 10.1.0

📅 06-26 👁️ 5884
【算法专题】约数个数
28365365体育投注

【算法专题】约数个数

📅 06-15 👁️ 8397
天国拯救销赃要多久
bet体育365冻卡么

天国拯救销赃要多久

📅 09-21 👁️ 1461
魔兽世界plus贫瘠之地蝎子在哪里
28365365体育投注

魔兽世界plus贫瘠之地蝎子在哪里

📅 11-13 👁️ 6075
[图]只差一个进球!乌拉圭2-0加纳双双出局
365bet平台

[图]只差一个进球!乌拉圭2-0加纳双双出局

📅 08-21 👁️ 781