如何在 Django Rest Framework 中将 Python datetime 对象转换为特定时区



我正在开发一个现有的代码库,它使用Django和django-rest-framework实现一个api。当您发布这样的日期时间时:

2019-06-21T10:35:46+02:00

它以 UTC 形式存储为 2019-06-21 08:35:46+00(如预期(。这是因为我有USE_TZ = True.

当我提供数据时,我还希望它再次转换为本地化格式(2019-06-21T10:35:46+02:00(。因此,按照此提示,我像这样实现它:

class DateTimeFieldWihTZ(serializers.DateTimeField):
    """ Class to make output of a DateTime Field timezone aware """
    def to_representation(self, value):
        value = timezone.localtime(value)
        return super(DateTimeFieldWihTZ, self).to_representation(value)

class PeopleMeasurementSerializer(HALSerializer):
    class Meta:
        model = PeopleMeasurement
        fields = [
            '_links',
            'id',
            'timestamp',
            'sensor',
            'count'
        ]
    timestamp = DateTimeFieldWihTZ(format='%Y-%m-%d %H:%M:%S')

但这起到了2019-06-21 08:35:46作用.我怎样才能再次将其作为2019-06-21T10:35:46+02:00服务?

您需要

settings.py中设置TIME_ZONE。只需将'timestamp'放入fields列表中,它就可以开箱即用。

为了明确,你也可以写

timestamp = serializers.DateTimeField(format='iso-8601')

请注意,我假设您为所有响应使用一个主要时区。如果您需要返回用户发送的时区的时间,请参阅此答案。

相关内容

  • 没有找到相关文章

最新更新