datetime 模块提供了可以通过多种方式操作日期和时间的类。在支持日期时间数学运算的同时,实现的关注点更着重于如何能够更有效地解析其属性用于格式化输出和数据操作。
有两种日期和时间的对象:“简单型“和”感知型“。
感知型对象有着用足以支持一些应用层面算法和国家层面时间调整的信息,例如时区和夏令时,来让自己和其他的感知型对象区别开来。感知型对象是用来表达不对解释器开放的特定时间信息。
简单型对象没包含足够多的信息来明确定位与之相关的 date/time 对象。 简单型对象所代表的是世界标准时间(UTC)、当地时间或者是其它时区的时间完全取决于程序,就像一个数字是代表的是米、英里或者质量完全取决于程序一样。 简单型对象以忽略了一些现实情况的为代价使得它容易理解和使用。
对于需要感知型对象的应用, datetime 对象和 time 对象有一个可选的时区信息属性 tzinfo ,这个属性可以设置给 tzinfo 类的子类实例。这些 tzinfo 对象捕获关于相对于世界标准时间(UTC)偏移、时区名字和夏令时是否有效等信息。需要注意的是,只有一个具体的 tzinfo 类,即由 datetime 模块提供的 timezone 类。 timezone 类可以代表相对于世界标准时间(UTC)固定偏移的简单时区,比如世界标准时间(UTC)自己或者北美东部时间或者东部夏令时。支持时区的详细程度取决于应用。世界各地的时间调整规则相比理性更加政治性,经常会变更。也没有一个基于世界标准时间(UTC)的标准套件适合用于所有应用。
datetime模块常量:
datetime.MINYEAR
date 或者 datetime 对象允许的最小年份。 常量 MINYEAR 是 1 。
datetime.MAXYEAR
date 或 datetime 对象允许最大的年份。常量 MAXYEAR 是 9999 。
class datetime.date
一个理想化的简单型日期,它假设当今的公历在过去和未来永远有效。 属性: year, month, and day。
示例:
from datetime import date
d = date(1999, 9, 29)
print(d)
print('year:', d.year)
print('month:', d.month)
print('day:', d.day)
输出:
1999-09-29
year: 1999
month: 9
day: 29
class datetime.time
一个理想化的时间,它独立于任何特定的日期,假设每天一共有 24*60*60 秒(这里没有”闰秒”的概念)。 属性: hour, minute, second, microsecond, 和 tzinfo。
示例:
from datetime import time
t = time(22, 45, 59)
print(t)
print('hour:', t.hour)
print('minute:', t.minute)
print('second:', t.second)
输出:
22:45:59
hour: 22
minute: 45
second: 59
class datetime.datetime
日期和时间的结合。属性:year, month, day, hour, minute, second, microsecond, and tzinfo.
示例:
from datetime import datetime
dt = datetime(1999, 9, 29)
print(dt)
print('year:', dt.year)
print('month:', dt.month)
print('day:', dt.day)
print('hour:', dt.hour)
print('minute:', dt.minute)
print('second:', dt.second)
输出:
1999-09-29 00:00:00
year: 1999
month: 9
day: 29
hour: 0
minute: 0
second: 0
class datetime.timedelta
表示两个 date 对象或者 time 对象,或者 datetime 对象之间的时间间隔,精确到微秒。
timedelta.min:timedelta(-999999999)timedelta.max:timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)
timedelta.resolution:timedelta(microseconds=1) 需要注意的是,因为标准化的缘故,timedelta.max > -timedelta.min,-timedelta.max 不可以表示一个 timedelta 类对象。
示例:
from datetime import datetime
from datetime import timedelta
today = datetime.now()
print('当前时间:', today)
hour7 = today + timedelta(hours=7)
print('加7小时的时间:', hour7)
today7 = today + timedelta(days=7)
print('加7天的时间:', today7)
输出:
当前时间: 2020-04-30 17:20:08.223027
加7小时的时间: 2020-05-01 00:20:08.223027
加7天的时间: 2020-05-07 17:20:08.223027
class datetime.tzinfo
一个描述时区信息的抽象基类。用于给 datetime 类和 time 类提供自定义的时间调整概念(例如,负责时区或者夏令时)。
class datetime.timezone
一个实现了 tzinfo 抽象基类的子类,用于表示相对于 世界标准时间(UTC)的偏移量
示例:
from datetime import datetime
from datetime import timedelta
from datetime import timezone
utc_dt = datetime.utcnow().replace(tzinfo=timezone.utc)
print(utc_dt)
cn_dt = utc_dt.astimezone(timezone(timedelta(hours=8)))
print(cn_dt)
jan_dt = utc_dt.astimezone(timezone(timedelta(hours=9)))
print(jan_dt)
输出:
2020-04-30 09:36:31.676210+00:00
2020-04-30 17:36:31.676210+08:00
2020-04-30 18:36:31.676210+09:00
网友评论