2015-12-31 20 views

回答

4

你的日期是一個「天真」的日期時間,它沒有時區(tz=None)。 然後,您必須通過設置時區來本地化此日期時間。使用pytz模塊來做到這一點。

下面是一個例子:

from datetime import datetime 
from pytz import timezone 
# define date format 
fmt = '%Y-%m-%d %H:%M:%S %Z%z' 
# define eastern timezone 
eastern = timezone('US/Eastern') 
# naive datetime 
naive_dt = datetime.now() 
# localized datetime 
loc_dt = datetime.now(eastern) 
print(naive_dt.strftime(fmt)) 
# 2015-12-31 19:21:00 
print(loc_dt.strftime(fmt)) 
# 2015-12-31 19:21:00 EST-0500 

閱讀pytz documentation瞭解更多信息

+0

我更新了我的答案。謝謝 –

0

儘管date沒有辦法選擇時區,但是datetime的確如此。您need to create a subclass of tzinfo與信息所需的時區:

class UTC(tzinfo): 
    def utcoffset(self, dt): 
     return timedelta(0) 

    def tzname(self, dt): 
     return "UTC" 

    def dst(self, dt): 
     return timedelta(0) 

例如,東方標準時間(UTC-5:00,沒有DST):

class EST(tzinfo): 
    def utcoffset(self, dt): 
     return timedelta(hours = -5) 

    def tzname(self, dt): 
     return "EST" 

    def dst(self, dt): 
     return timedelta(0) 

製造類後你的時區,你會再拿到date你想用:

datetime.now(UTC()).date() 

(更換UTC與TI mezone class name)

還有一個庫,pytz,這會讓你更容易。

+0

美國東部時間僅爲-5 *標準*時間期間。當* daylight *時間生效時,它將切換到-4。因此像pytz這樣的圖書館的必要性。 –

+0

@MattJohnson這只是一個例子,但因爲這個原因我使用了_EST_。 EST始終是UTC-5,EDT始終是UTC-4,ET在兩者之間切換。確切地說,是 – user44294

+0

。 OP要求「東部」。當然,他們也可以在澳大利亞的東部時間談論。大聲笑。 :) –

相關問題