Этот ответ может быть полезен, если вы не хотите использовать какие-либо другие модули, кроме datetime
.
datetime.utcfromtimestamp(timestamp)
возвращает наивный datetime
объект (не осведомленный).Осведомленные осведомлены о часовом поясе, а наивные - нет.Вам нужен осведомленный, если вы хотите конвертировать между часовыми поясами (например, между UTC и местным временем).
Если вы не тот, кто создает дату для начала, но вы все равно можете создать наивный datetime
объект во времени UTC, вы можете попробовать этот код Python 3.x для его преобразования:
import datetime
d=datetime.datetime.strptime("2011-01-21 02:37:21", "%Y-%m-%d %H:%M:%S") #Get your naive datetime object
d=d.replace(tzinfo=datetime.timezone.utc) #Convert it to an aware datetime object in UTC time.
d=d.astimezone() #Convert it to your local timezone (still aware)
print(d.strftime("%d %b %Y (%I:%M:%S:%f %p) %Z")) #Print it with a directive of choice
Будьте осторожны, чтобы не ошибочно предположить, что если ваш часовой пояс в настоящее время MDT, переход на летнее время не работаетс вышеуказанным кодом, так как он печатает MST.Вы заметите, что если вы измените месяц на август, он напечатает MDT.
Другой простой способ получить осведомленный объект datetime
(также в Python 3.x) - создать его с помощьючасовой пояс, указанный для начала.Вот пример использования UTC:
import datetime, sys
aware_utc_dt_obj=datetime.datetime.now(datetime.timezone.utc) #create an aware datetime object
dt_obj_local=aware_utc_dt_obj.astimezone() #convert it to local time
#The following section is just code for a directive I made that I liked.
if sys.platform=="win32":
directive="%#d %b %Y (%#I:%M:%S:%f %p) %Z"
else:
directive="%-d %b %Y (%-I:%M:%S:%f %p) %Z"
print(dt_obj_local.strftime(directive))
Если вы используете Python 2.x, вам, вероятно, придется создать подкласс datetime.tzinfo
и использовать его, чтобы помочь вам создать осведомленный объект datetime
, поскольку datetime.timezone
не существует в Python 2.x.