如何在Django Rest Framework中将Python日期时间对象转换为特定时区?

时间:2019-07-16 15:49:04

标签: python django datetime django-rest-framework timezone

我正在研究一个现有的代码库,该代码库使用Djangodjango-rest-framework实现api。当您发布这样的日期时间时:

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

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

当我提供数据时,我也希望再次将其转换为本地化格式(2019-06-21T10:35:46+02:00)。因此,在this tip之后,我是这样实现的:

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

1 个答案:

答案 0 :(得分:0)

您需要settings.py中的set TIME_ZONE。只需将'timestamp'放在fields列表中,即可使用。

为明确起见,您还可以编写

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

请注意,我假设您对所有答复都使用一个主要时区。如果您需要返回用户发送时区的时间,请参见this answer