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

 

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