Изо всех сил для преобразования часовых поясов GMT в CST в Python - PullRequest
0 голосов
/ 20 декабря 2018

Я потратил часы на это, но мой мозг не может понять это, и кажется, что много информации, которую я нашел, применимо к Python 2?

import datetime as dt
from datetime import datetime
from pytz import timezone
import pytz
time_stamp = 'Mon, 17 Dec 2018 18:05:01 GMT'

central = timezone('US/Central')
published_time = datetime.strptime(time_stamp, '%a, %d %b %Y %H:%M:%S %Z')
published_cst = published_time.astimezone(central)
actual_time_published = published_cst.strftime('%a, %b %d %Y at %I:%M:%S %p %Z')




print(time_stamp)
print(published_time)
print(published_cst)
print(actual_time_published)

Ожидается, что acutal_time_published будет CST, потому что для ключ_обнародованного времени GMT-6 (третий результат), но здесь фактический результат для каждой команды печати. ​​

Mon, 17 Dec 2018 18:05:01 GMT
2018-12-17 18:05:01
2018-12-17 18:05:01-06:00
Mon, Dec 17 2018 at 06:05:01 PM CST

Вытягивание волос!

РЕДАКТИРОВАТЬ: Да, у меня был "entry.published", где я хотел поставить "time_stamp" для целей этого вопроса.Спасибо за редактирование!

1 Ответ

0 голосов
/ 21 декабря 2018

Я понял это!Несмотря на то, что исходная метка времени возвращала часовой пояс (GMT), ей не было присвоено значение tzinfo (значение часового пояса).Это все еще было «наивным» датой-временем, хотя строка содержала часовой пояс, распознаваемый strptime.Итак, я просто присвоил значение tzinfo UTC исходному времени, и оно, похоже, исправило его.

time_stamp = 'Mon, 17 Dec 2018 18:05:01 GMT'
utc = timezone('UTC')
central = timezone('US/Central')
published_time = datetime.strptime(time_stamp, '%a, %d %b %Y %H:%M:%S %Z')
published_gmt = published_time.replace(tzinfo=utc)
published_cst = published_gmt.astimezone(central)
actual_time_published = published_cst.strftime('%a, %b %d %Y at %I:%M:%S %p %Z')

Итак ...

print(time_stamp)
print(published_time)
print(published_cst)
print(actual_time_published)

Получает этот вывод:

Mon, 17 Dec 2018 18:05:01 GMT
2018-12-17 18:05:01
2018-12-17 18:05:01+00:00
2018-12-17 12:05:01-06:00
Mon, Dec 17 2018 at 12:05:01 PM CST
...