datetime 模块详解 -- 基本的日期和时间类型

本文详细介绍了Python的datetime模块,包括date、time、datetime和timedelta类,以及它们的属性、方法和操作。通过示例展示了如何创建、操作和格式化日期和时间,帮助理解如何在Python中高效地处理日期和时间数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:https://www.cnblogs.com/fclbky/articles/4098204.html

datetime 模块提供了各种类用于操作日期和时间,该模块侧重于高效率的格式化输出

在 Python 中,与时间处理有关的模块包括:time,datetime 以及 calendar


datetime 模块定义了两个常量:

  • datetime.MINYEAR - date 和 datetime 对象所能支持的最小年份,object.MINYEAR 的值为 1
  • datetime.MAXYEAR - date 和 datetime 对象所能支持的最大年份,object.MAXYEAR 的值为 9999



datetime 模块中定义的类(前四个下方有详解):

  • datetime.date - 表示日期的类,常用属性:year, month, day
  • datetime.time - 表示时间的类,常用属性:hour, minute, second, microsecond, tzinfo
  • datetime.datetime - 表示日期和时间的类,常用属性: year, month, day, hour, minute, second, microsecond, tzinfo
  • datetime.timedelta - 表示时间间隔,即两个时间点(date,time,datetime)之间的长度
  • datetime.tzinfo - 表示时区的基类,为上方的 time 和 datetime 类提供调整的基准
  • datetime.timezone - 表示 UTC 时区的固定偏移,是 tzinfo 基类的实现


注:上边这些类的对象是不可变的

上边这些类的从属关系:

  1. object
  2.     timedelta
  3.     tzinfo
  4.         timezone
  5.     time
  6.     date
  7.         datetime
复制代码






timedelta 对象

timedelta 对象表示两个日期或时间之间的间隔

  1. datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) 
复制代码


以上所有的参数都是可选的(默认为 0),参数的可以是整数或浮点数,正数或负数。

内部的存储单位只有 days(天)、seconds(秒)、microseconds(毫秒),其他单位均先转换后再存储:

  • 1 millisecond -> 1000 microseconds
  • 1 minutes -> 60 seconds
  • 1 hours -> 3600 seconds
  • 1 weeks -> 7 days


而 days、seconds 和 microseconds 为了不产生时间表示上的歧义,将根据以下范围自动“进位”:

  • 0 <= microseconds < 1000000
  • 0 <= seconds < 3600 * 24(1小时的秒数 * 24小时)
  • -999999999 <= days <= 999999999



timedelta 类属性:

  • timedelta.min - timedelta 对象负值的极限,timedelta(-999999999)
  • timedelta.max - timedelta 对象正值的极限,timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)
  • timedelta.resolution - 两个 timedelta 不相等的对象之间最小的差值,timedelta(microseconds=1)


请注意,在正常情况下,timedelta.max > -timedelta.min,-timedelta.max 无意义。


timedelta 实例属性(只读):

属性 取值范围
timedelta.days -999999999 ~ 999999999
timedelta.seconds 0 ~ 86399
timedelta.microseconds 0 ~ 999999



timedelta 对象支持的操作:

操作 结果
t1 = t2 + t3 t2 和 t3 的和,随后:t1 - t2 == t3 and t1 - t3 == t2 为 True(注1)
t1 = t2 - t3 t2 和 t3 的差,随后:t1 == t2 - t3 and t2 == t1 + t3 为 True(注1)
t1 = t2 * i 或 t1 = i * t2 对象乘以一个整数,随后:t1 // i == t2 为 true;且 i != 0
t1 = t2 * f 或 t1 = f * t2 对象乘以一个浮点数,结果四舍五入到精度 timedelta.resolution(注1)
f = t2 / t3 t2 和 t3 的商(注3),返回一个 float 对象
t1 = t2 / f 或 t1 = t2 / i 对象除以一个整数或浮点数,结果四舍五入到精度 timedelta.resolution
t1 = t2 // i 或 t1 = t2 // t3 对象地板除一个整数或浮点数,结果舍去小数,返回一个整数(注3)
t1 = t2 % t3 t2 和 t3 的余数,返回一个 timedelta 对象(注3)
q, r = divmod(t1, t2) 计算 t1 和 t2 的商和余数,q = t1 // t2(注3),r = t1 % t2,q 是一个整数,r 是一个 timedelta 对象
+t1 返回一个 timedelta 对象,且值相同(注2)
-t1 等同于 timedelta(-t1.days, -t1.seconds, -t1.microseconds),并且相当于 t1 * -1(注1、4)
abs(t) 当 t.days >= 0 时,等同于 +t;当 t.days < = 时,等同于 -t(注2)
str(t) 返回一个字符串,按照此格式:[D day[ s ], ][H]H:MM:SS[.UUUUUU]
repr(t) 返回一个字符串,按照此格式:datetime.timedelta(D[, S[, U]])


注1:这是准确的,但可能会溢出
注2:这是准确的,并且不会溢出
注3:除数为 0 会引发 ZeroDivisionError 异常
注4:-timedelta.max 是无意义的


timedelta 实例方法:

timedelta.total_seconds()
- 返回 timedelta 对象所包含的总秒数,相当于 td / timedelta(seconds=1)

请注意,对于非常大的时间间隔(在大多数平台上是大于270年),这种方法将失去微秒(microsecond)精度


timedelta 用法示例:

  1. # 爱学习,爱鱼C工作室
  2. >>> from datetime import timedelta
  3. >>> year = timedelta(days=365)
  4. >>> another_year = timedelta(weeks=40, days=84, hours=23,
  5. ...                          minutes=50, seconds=600)  # adds up to 365 days
  6. >>> year.total_seconds()
  7. 31536000.0
  8. >>> year == another_year
  9. True
  10. >>> ten_years = 10 * year
  11. >>> ten_years, ten_years.days // 365
  12. (datetime.timedelta(3650), 10)
  13. >>> nine_years = ten_years - year
  14. >>> nine_years, nine_years.days // 365
  15. (datetime.timedelta(3285), 9)
  16. >>> three_years = nine_years // 3;
  17. >>> three_years, three_years.days // 365
  18. (datetime.timedelta(1095), 3)
  19. >>> abs(three_years - ten_years) == 2 * three_years + year
  20. True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值