我利用日期時間模塊來生成當前日期。但是,當我在晚上7點後運行這個時,當前日期變爲明天的日期。如何在python中將時區設置爲東部時間模塊?
我不知道如何設置時區以下模塊
from datetime import *
print date.today()
我讀過documentation但還沒有找到如何設置呢。
我利用日期時間模塊來生成當前日期。但是,當我在晚上7點後運行這個時,當前日期變爲明天的日期。如何在python中將時區設置爲東部時間模塊?
我不知道如何設置時區以下模塊
from datetime import *
print date.today()
我讀過documentation但還沒有找到如何設置呢。
你的日期是一個「天真」的日期時間,它沒有時區(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瞭解更多信息
儘管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,這會讓你更容易。
美國東部時間僅爲-5 *標準*時間期間。當* daylight *時間生效時,它將切換到-4。因此像pytz這樣的圖書館的必要性。 –
@MattJohnson這只是一個例子,但因爲這個原因我使用了_EST_。 EST始終是UTC-5,EDT始終是UTC-4,ET在兩者之間切換。確切地說,是 – user44294
。 OP要求「東部」。當然,他們也可以在澳大利亞的東部時間談論。大聲笑。 :) –
我更新了我的答案。謝謝 –