-3
我真的很驚訝沒有找到一個簡單的方法來做到這一點在Python中。我們在12月寫了這篇文章,因爲它是冬天:將美國/東部轉換爲UTC,包括夏令時蟒蛇
def get_utc_time(dt_or_str, number_of_days=None, time_format=DATETIME_FORMAT):
"""
:param dt_or_str:
:return:
"""
eastern = pytz.timezone('US/Eastern')
# try:
if isinstance(dt_or_str, datetime):
new_date_str = dt_or_str.strftime(time_format)
new_date_obj = dt_or_str
else:
new_date_str = dt_or_str
new_date_obj = datetime.strptime(dt_or_str, time_format)
if not number_of_days:
utc_time = eastern.localize(
datetime.strptime(new_date_str, time_format),
is_dst=None).astimezone(pytz.utc)
else:
est_time = new_date_obj - timedelta(days=number_of_days)
utc_time = eastern.localize(est_time, is_dst=None).astimezone(pytz.utc)
utc_time = utc_time.replace(tzinfo=None)
這樣做是增加5個小時到您的時間使它成爲UTC。事實證明,在春季/夏季東部時間僅比UTC UTC時間晚4個小時,所以我們的代碼現在已經被破壞。
這是我們寫的不暑期工作的測試:
def test_get_utc_time_incoming_string(self):
result = get_utc_time("2017-02-02 04:38")
self.assertEqual(result, datetime.datetime(2017, 2, 2, 8, 38))
你怎麼能EST轉換爲UTC,將工作,全年?自從夏令時每年發生變化以來,我不想對其進行硬編碼。謝謝
爲什麼你認爲冬天的日期應該只有4個小時不同?你是否想要將當前的時區差異(使用DST)應用於另一個不在DST中的日期?這沒有什麼意義。 –
不,冬天的日子有5個小時不同......夏天/春天/初秋的日子是4個小時。我會發布解決方案 – codyc4321
但是您的測試日期是2月份的冬季日期,並且您正在測試以查看是否有4小時不同(4:38與8:38)。 –