pythonpytz和datetime.astimezone的行为不符合预期

pythonpytz和datetime.astimezone的行为不符合预期,python,python-datetime,pytz,Python,Python Datetime,Pytz,我有一个datetime对象保存在django字段中。我查询它,更改时区并打印它,这是代码和我得到的: 代码: 印刷品: event.date_start: 2020-11-17 18:00:00+00:00 event.date_start.hour: 18 event.date_start.tzinfo: UTC user_timezone: Etc/GMT-5 event_user_timezone: 2020-11-17 23:00:00+05:00 event_user_timezon

我有一个datetime对象保存在django字段中。我查询它,更改时区并打印它,这是代码和我得到的:

代码:

印刷品:

event.date_start: 2020-11-17 18:00:00+00:00
event.date_start.hour: 18
event.date_start.tzinfo: UTC
user_timezone: Etc/GMT-5
event_user_timezone: 2020-11-17 23:00:00+05:00
event_user_timezone.hour: 23

如您所见,初始tzinfo是UTC,然后我使用
astimezone
来实现它,并将其更改为
ETC/GMT-5
。但时间变为GMT+5。我不明白。如果您需要额外的信息,请告诉我。

记录的用户档案的值是多少。时区?如果您已经在使用
pytz
,您可以使用类似
America/Guayaquil
的时区名称,而不是
GMT-5
,因为它也将处理DST。@Ionut Ticus
logged\u user\u profile的值。时区
是GMT-5。感谢DST建议这正是这些
etc/gmt
UTC偏移的工作原理-例如,gmt-5表示“如果减去5小时,此时间将为gmt(因此时间将显示为UTC+5)”。顺便说一句,这与pytz无关。如果您从dateutil或zoneinfo获取时区也是一样的。@MrFuppes这可能是pytz的错误,因为我住在GMT-5,比UTC晚了5个小时。不。这是另一回事-例如,我当前的UTC偏移量是CET/UTC+1,但相应的etc/GMT将是etc/GMT**-1**。还有,这些“etc”“时区不是皮茨的发明。我的底线是:它只是让人困惑,不要使用它们。正如@IonutTicus所评论的,最好使用propper IANA时区名称来本地化datetime对象。更好的是:不要再使用pytz了,Python3.9-不推荐使用pytz。
event.date_start: 2020-11-17 18:00:00+00:00
event.date_start.hour: 18
event.date_start.tzinfo: UTC
user_timezone: Etc/GMT-5
event_user_timezone: 2020-11-17 23:00:00+05:00
event_user_timezone.hour: 23