python3从零学习-5.2、基本的日期和时间类型datetime

      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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章