datetime 模块提供用于处理日期和时间的类。
在支持日期时间数学运算的同时,实现的关注点更着重于如何能够更有效地解析其属性用于格式化输出和数据操作。
参见
模块 calendar
通用日历相关函数
模块 time
时间的访问和转换
dateutil 包
具有扩展时区和解析支持的第三方库。
感知型对象和简单型对象
日期和时间对象可以根据它们是否包含时区信息而分为“感知型”和“简单型”两类。
充分掌握应用性算法和政治性时间调整信息例如时区和夏令时的情况下,一个 感知型 对象就能相对于其他感知型对象来精确定位自身时间点。 感知型对象是用来表示一个没有解释空间的固定时间点。 1
简单型 对象没有包含足够多的信息来无歧义地相对于其他 date/time 对象来定位自身时间点。 不论一个简单型对象所代表的是世界标准时间(UTC)、当地时间还是某个其他时区的时间完全取决于具体程序,就像一个特定数字所代表的是米、英里还是质量完全取决于具体程序一样。 简单型对象更易于理解和使用,代价则是忽略了某些现实性考量。
对于要求感知型对象的应用,datetime 和 time 对象具有一个可选的时区信息属性 tzinfo,它可被设为抽象类 tzinfo 的子类的一个实例。 这些 tzinfo 对象会捕获与 UTC 时间的差值、时区名称以及夏令时是否生效等信息。
datetime 模块只提供了一个具体的 tzinfo 类,即 timezone 类。 timezone 类可以表示具有相对于 UTC 的固定时差的简单时区,例如 UTC 本身或北美的 EST 和 EDT 时区等。 支持时间的详细程度取决于具体的应用。 世界各地的时间调整规则往往是政治性多于合理性,经常会发生变化,除了 UTC 之外并没有一个能适合所有应用的标准。
常量
The datetime module exports the following constants:
datetime.MINYEAR
date 或者 datetime 对象允许的最小年份。 常量 MINYEAR 是 1 。
datetime.MAXYEAR
date 或 datetime 对象允许最大的年份。常量 MAXYEAR 是 9999 。
有效的类型
class datetime.date
一个理想化的简单型日期,它假设当今的公历在过去和未来永远有效。 属性: year, month, and day。
class datetime.time
一个独立于任何特定日期的理想化时间,它假设每一天都恰好等于 246060 秒。 (这里没有“闰秒”的概念。) 包含属性: hour, minute, second, microsecond 和 tzinfo。
class datetime.datetime
日期和时间的结合。属性:year, month, day, hour, minute, second, microsecond, and tzinfo.
class datetime.timedelta
表示两个 date 对象或者 time 对象,或者 datetime 对象之间的时间间隔,精确到微秒。
class datetime.tzinfo
一个描述时区信息对象的抽象基类。 用来给 datetime 和 time 类提供自定义的时间调整概念(例如处理时区和/或夏令时)。
class datetime.timezone
一个实现了 tzinfo 抽象基类的子类,用于表示相对于 世界标准时间(UTC)的偏移量。
3.2 新版功能.
这些类型的对象都是不可变的。
子类关系
object
timedelta
tzinfo
timezone
time
date
datetime
通用的特征属性
date, datetime, time 和 timezone 类型共享这些通用特性:
这些类型的对象都是不可变的。
这些类型的对象是可哈希的,这意味着它们可被作为字典的键。
这些类型的对象支持通过 pickle 模块进行高效的封存。
确定一个对象是感知型还是简单型
date 类型的对象都是简单型的。
time 或 datetime 类型的对象可以是感知型或者简单型。
一个 datetime 对象 d 在以下条件同时成立时将是感知型的:
d.tzinfo 不为 None
d.tzinfo.utcoffset(d) 不返回 None
在其他情况下,d 将是简单型的。
一个 time 对象 t 在以下条件同时成立时将是感知型的:
t.tzinfo 不为 None
t.tzinfo.utcoffset(None) 不返回 None。
在其他情况下,t 将是简单型的。
感知型和简单型之间的区别不适用于 timedelta 对象。