Преобразование метки времени в другой часовой пояс в Python - PullRequest
0 голосов
/ 04 августа 2020

У меня есть отметка времени (1596526195), которая находится в GMT + 2 (2020-08-04 11:29:55), и я хотел бы преобразовать ее в GMT-5, поэтому она должна быть 2020-08-04 04:29:55.

Для Теперь мой сценарий:

import pytz
from datetime import datetime

time_zone = "Etc/GMT-5"
ts = 1596533395 
ts_date = datetime.fromtimestamp(ts)
print(ts_date)  # 2020-08-04 11:29:55+00:00
ts_date_converted = pytz.utc.localize(ts_date).astimezone(pytz.timezone(time_zone))
print(ts_date_converted)  # 2020-08-04 16:29:55+05:00

Я вижу две проблемы:

  1. По умолчанию python принимает ts как GMT + 0. Как указать python, чтобы это ts читалось как GMT + 2? Я не хочу преобразовывать его, потому что в этом случае он изменит ts_date, нет? ts_date должно быть 2020-08-04 11:29:55+02:00, а не 2020-08-04 09:29:55+00:00
  2. Почему у меня результат в GMT + 5, тогда как я пытаюсь преобразовать в GMT-5? ts_date_converted должно быть 2020-08-04 04:29:55-05:00 Я верю

Спасибо

1 Ответ

0 голосов
/ 04 августа 2020

datetime.fromtimestamp принимает аргумент tz, который позволяет вам указать информацию о часовом поясе, см. документацию . Кроме того, если вы работаете только со смещениями UT C, вам не нужна сторонняя библиотека. Вы можете просто построить timezone из timedelta:

from datetime import datetime, timezone, timedelta

ts = 1596533395 
dt_UTCplus2 = datetime.fromtimestamp(ts, tz=timezone(timedelta(hours=2)))
print(dt_UTCplus2)
# 2020-08-04 11:29:55+02:00

dt_UTCminus5 = dt_UTCplus2.astimezone(timezone(timedelta(hours=-5)))
print(dt_UTCminus5)
# 2020-08-04 04:29:55-05:00

Если вы работаете с часовыми поясами вместо смещений UT C, я бы посоветовал вам использовать dateutil (pytz будет устаревшим с выпуском Python 3.9):

from datetime import datetime
from dateutil import tz

ts = 1596533395 
dt_UTCplus2 = datetime.fromtimestamp(ts, tz=tz.gettz("Etc/GMT-2"))
print(dt_UTCplus2)
# 2020-08-04 11:29:55+02:00

dt_UTCminus5 = dt_UTCplus2.astimezone(tz.gettz("Etc/GMT+5"))
print(dt_UTCminus5)
# 2020-08-04 04:29:55-05:00
...