将时间戳转换为本地时区中的正确日期时间 - Django

问题描述 投票:0回答:2

我从 API 获取时间戳。当我将其转换为:

timestamp = datetime.fromtimestamp(json.loads(m)["_timestamp"], tz=pytz.timezone('Europe/Berlin')) 

打印时我在控制台中得到了正确的时间:

2021-11-10 15:22:26+01:00

但是当我将其保存到数据库时:

BedTemperatureHistory.objects.create(TimeStamp=timestamp)

数据库中的时间戳看起来像这样(少一小时):

2021-11-10 14:22:26.000000 +00:00 

我的时区设置如下所示:

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Europe/Berlin'

USE_I18N = True

USE_L10N = True

USE_TZ = False

有谁知道我需要做什么才能在数据库中保存正确的时间戳?

python django datetime
2个回答
0
投票

您需要在设置中启用时区支持。

USE_TZ = True

编辑: 时间戳实际上已正确存储在您的问题中。您会注意到,这两个时间实际上是相同的,15:22+01:00 与 14:22+00:00 相同。 Django 以 UTC 存储日期时间,以避免夏令时问题:

Django 将 UTC 格式的日期时间信息存储在数据库中,在内部使用时区感知的日期时间对象,并在模板和表单中将它们转换为最终用户的时区。


0
投票

这对我有用。

设置.py

TIME_ZONE = 'Australia/Melbourne' # your local Timezone

USE_TZ = True

模型.py

from django.db import models
from django.utils import timezone

class MyModel(models.Model)
    timestamp = models.DateTimeField(auto_now_add=True)

  def __str__(self):
        return f"timestamp: {timezone.localtime(self.timestamp).strftime('%I:%M:%S %p %d %b %Y')}" # you can change or remove the format

© www.soinside.com 2019 - 2024. All rights reserved.