DateTime類提供各種函數來操縱日期和時間間隔。您在其中使用的DateTime對象datetime.now()
實際上是DateTime類的對象。這些對象幫助我們使用日期和時間上的函數。
注意:有關更多信息,請參見帶有示例的Python datetime模塊。
DateTime.tzinfo()
的datetime.now()
沒有有關時區的任何信息。它僅使用當前係統時間。在某些情況下,可能需要時區詳細信息。在這種情況下,將使用tzinfo抽象類。 tzinfo是一個抽象基類。它不能直接實例化。一個具體的子類必須派生它並實現此抽象類提供的方法。
tzinfo類的實例可以傳遞給datetime和time對象的構造函數。它可以在本地時間轉換為UTC或考慮夏時製的情況下找到其應用。
天真和感知日期時間對象
不包含有關時區的任何信息的datetime對象被稱為是樸素的datetime對象。對於樸素的日期時間對象,datetime_object.tzinfo
將會None
。 Aware datetime對象包含嵌入其中的時區信息。
tzinfo基類中可用於實現的方法有:
- utcoffset(self, dt)
- dst(self, dt)
- tzname(self, dt)
- fromutc(self, dt)
utcoffset()
它返回作為參數傳遞的datetime實例的偏移量。
這個偏移量是指什麽?
它指的是時區偏移量,它表示時區距離世界標準時間或世界標準時間(UTC)提前了幾個小時。偏移量寫為+00:00。例如:對於亞洲/台北,它表示為UTC +08:00。
它占用日期時間對象的時間,並返回日期時間對象中的時間與UTC中同一點的時間之間的差。它返回UTC以東的分鍾數偏移量。如果當地時間在UTC西部,則為負。通用的實現形式如下:
For fixed offset: def utcoff(self, dt): return constant For time aware objects: def utcoffset(self, dt): return self.stdoffset + self.dst(dt)
dst()
縮寫為夏令時。它表示在夏季時間提前1個小時,因此黑暗會根據時鍾而下降。設置為開或關。根據包含9個元素的元組檢查它,如下所示:
(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.weekday(), 0, 0)
編寫私有函數以根據這9個元素返回0、1或-1。根據該值dst(self, dt)
確定。該函數寫在類中dst()
被定義為。它寫為:
def _isdst(self, dt):
tt = (dt.year, dt.month, dt.day,
dt.hour, dt.minute, dt.second,
dt.weekday(), 0, 0)
stamp = _time.mktime(tt)
tt = _time.localtime(stamp)
return tt.tm_isdst > 0
這裏mktime()
接受此元組並將其轉換為自當地時間開始經過的秒數。然後,tm_isdst()
與mktime一起使用。它返回如下值:
‘1’ - Daylight Saving ON
‘0’ - Daylight Saving OFF
‘-1’ - Daylight Saving information unknown
將此代碼添加到類後,dst()
可以根據條件定義如下。
For fixed offset class: def dst(self, dt): return ZERO For time aware objects: def utcoffset(self, dt): if self._isdst(dt): return DSTOFFSET else: return STDOFFSET
tzname()
這用於查找傳遞的datetime對象的時區名稱。它返回一個Python String對象。
例:
import datetime as dt
from dateutil import tz
tz_string = dt.datetime.now(dt.timezone.utc).astimezone().tzname()
print("datetime.now():", tz_string)
NYC = tz.gettz('Europe / Berlin')
dt1 = dt.datetime(2015, 5, 21, 12, 0)
dt2 = dt.datetime(2015, 12, 21, 12, 0, tzinfo = NYC)
print("Naive Object:", dt1.tzname())
print("Aware Object:", dt2.tzname())
datetime.now():UTC Naive Object:None Aware Object:CET
fromutc()
此函數使用UTC占用對象的日期和時間,並返回等效的本地時間。它主要用於調整日期和時間。默認調用datetime.astimezone()
實施。 dt.tzinfo將作為self傳遞,dt的日期和時間數據將作為等效的當地時間返回。
注意:它會上升ValueError
如果dt.tzinfo不是self或/並且dst()為None。
一般實現如下:
def fromutc(self, dt): dt_offset = dt.utcoffset() dt_dst = dt.dst() delta = dt_offset - dt_dst if delta: dt += delta dtdst = dt.dst() if dtdst: return dt + dtdst else: return dt
注:本文由純淨天空篩選整理自erakshaya485大神的英文原創作品 Python – datetime.tzinfo()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。