我正在开发一个现有的代码库,它使用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')
请注意,我假设您为所有响应使用一个主要时区。如果您需要返回用户发送的时区的时间,请参阅此答案。