我有一个Django应用程序,其中PostgreSQL作为数据库,用于记录来自不同区域的用户的操作。最近,其中一个地区(俄罗斯伏尔加格勒)的时区永久地于2018年10月28日从UTC + 3h更改为UTC + 4h。
2019年1月,pytz在pypi中进行了更新,我更新了pytz依赖项,以便该区域收到正确的时区设置。
问题在于,2018年10月28日之前发生的事件现在与当前时区“不同步”。如果我正确理解,在pytz更新之后,Django现在会认为时区是并且始终是 UTC + 4h,因此2018年10月28日之前的事件会向前移动一小时。例如,它显示的是本地时间2pm,而不是1pm。
主要要求是用户应该能够在其本地时区看到正确的时间。例如,如果用户在2018年10月28日前后每天下午1点执行操作,则她应在所有事件中看到下午1点。即使10月28日之前发生的事件现在的UTC时间与该日期之后发生的事件不同。当前事件的日期时间使用模型方法显示:
class Event(models.Model):
date_created = models.DateTimeField(auto_now_add=True, blank=False, null=False)
organization = models.ForeignKey(Organization, blank=False, null=False)
def date_created_local(self):
return self.date_created.astimezone(self.organization.get_timezone()).isoformat()
还有另一个数据使用者,总而言之,它无需任何预处理即可获取事件数据。如果能够继续以与用户相同的意义继续接收正确数据,那就太好了。
尽管数据库中现在有正确的UTC时间戳(如果我理解正确),我可能需要执行以下更改之一:
Organization.get_timezone()
,以使其采用例如日期并根据日期返回时区。也许有更聪明的方法可以做到这一点。所以我的问题是,是否存在更好/更多的pythonic / Django处理时区变化的方式?由于时区会不时发生变化,所以我希望有比上述两个更好的选择。