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