python 的 datatime类

Python 的 datetime 类详解

datetime 是 Python 标准库 datetime 模块中的核心类,用于处理日期和时间。它结合了 datetime 类的功能,提供了丰富的日期时间操作方法。


1. 导入模块
from datetime import datetime, timedelta, timezone

2. 创建 datetime 对象
方法描述示例
构造函数直接指定年、月、日等参数datetime(2023, 5, 15, 14, 30, 0)
now()当前本地日期和时间datetime.now()
utcnow()当前 UTC 日期和时间datetime.utcnow()
fromtimestamp()将时间戳转为 datetimedatetime.fromtimestamp(1684000000)
strptime()从字符串解析时间datetime.strptime("2023-05-15", "%Y-%m-%d")

示例:

# 手动创建
dt1 = datetime(2023, 5, 15, 14, 30, 0)
print(dt1)  # 输出: 2023-05-15 14:30:00

# 当前时间
dt2 = datetime.now()
print(f"当前时间: {dt2}")

# 解析字符串
dt3 = datetime.strptime("2023-05-15 14:30", "%Y-%m-%d %H:%M")
print(dt3)  # 输出: 2023-05-15 14:30:00

3. 常用属性
属性描述取值示例
year年份2023
month月份1-12
day1-31
hour小时0-23
minute分钟0-59
second0-59
microsecond微秒0-999999
tzinfo时区信息Nonetimezone 对象

示例:

dt = datetime(2023, 5, 15, 14, 30, 45, 123456)
print(dt.year)          # 2023
print(dt.microsecond)   # 123456

4. 日期时间操作
a. 格式化输出:strftime()

datetime 转为格式化的字符串。

常用格式代码:

  • %Y:四位年份(如 2023)
  • %m:两位月份(01-12)
  • %d:两位日(01-31)
  • %H:24小时制小时(00-23)
  • %M:分钟(00-59)
  • %S:秒(00-59)

示例:

dt = datetime.now()
formatted = dt.strftime("%Y-%m-%d %H:%M:%S")
print(formatted)  # 如: "2023-05-15 14:30:00"

custom_format = dt.strftime("现在是 %Y 年 %m 月,时间 %H 点 %M 分")
print(custom_format)  # 如: "现在是 2023 年 05 月,时间 14 点 30 分"
b. 时间替换:replace()

生成一个修改部分属性的新对象(原对象不可变)。

dt = datetime(2023, 5, 15, 14, 30)
new_dt = dt.replace(year=2024, hour=15)
print(new_dt)  # 输出: 2024-05-15 15:30:00
c. 时间差计算:timedelta
  • 日期加减
  • 计算两个时间的差值

示例:

# 加减时间
dt = datetime(2023, 5, 15)
delta = timedelta(days=2, hours=6)
new_dt = dt + delta
print(new_dt)  # 输出: 2023-05-17 06:00:00

# 计算时间差
dt1 = datetime(2023, 5, 15)
dt2 = datetime(2023, 5, 20)
diff = dt2 - dt1
print(diff.days)  # 输出: 5

5. 时区处理
a. 添加时区
# 创建带时区的时间(UTC+8)
tz = timezone(timedelta(hours=8))
dt = datetime(2023, 5, 15, 14, 30, tzinfo=tz)
print(dt)  # 输出: 2023-05-15 14:30:00+08:00
b. 时区转换
# UTC 时间
utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
print(utc_dt)  # 如: 2023-05-15 06:30:00+00:00

# 转换为北京时间(UTC+8)
bj_tz = timezone(timedelta(hours=8))
bj_dt = utc_dt.astimezone(bj_tz)
print(bj_dt)  # 如: 2023-05-15 14:30:00+08:00

6. 其他实用方法
a. 转换为 datetime
dt = datetime.now()

# 提取日期部分
date_part = dt.date()   # 返回 date 对象
print(date_part)        # 如: 2023-05-15

# 提取时间部分
time_part = dt.time()   # 返回 time 对象
print(time_part)        # 如: 14:30:00.123456
b. 时间戳转换
dt = datetime(2023, 5, 15, 0, 0)

# 转时间戳(秒级)
timestamp = dt.timestamp()
print(timestamp)  # 输出: 1684108800.0

# 从时间戳恢复
restored_dt = datetime.fromtimestamp(1684108800)
print(restored_dt)  # 输出: 2023-05-15 08:00:00(注意本地时区)

注意事项

  1. 不可变性datetime 对象不可修改,操作会返回新对象。
  2. 时区问题:默认创建的 datetime 对象没有时区信息(称为 “naive”),处理跨时区问题需谨慎。
  3. 输入范围:月份为 1-12,小时为 0-23,否则会抛出 ValueError

通过上述方法,可以高效处理绝大多数日期时间操作,满足日志记录、数据分析、定时任务等场景需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值