當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python datetime.tzinfo()用法及代碼示例


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()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。