我正在使用Django 1.11和Postgres 9.4。
如何确保TruncYear产生祖鲁时间(2019-10-01T00:00:00Z)。我注意到它使用这样的时区创建了日期时间(2017-01-01T00:00:00 + 03:00)
这是TruncYear查询集的代码:
from django.db.models import Count
from django.db.models.functions import TruncMonth,TruncYear,TruncDay,TruncHour
tracking_in_timeseries_data = Tracking.objects.annotate(
year=TruncYear('created_at')).values('year','venue').annotate(
count=Count('employee_id',distinct = True)).order_by('year')
>>> for exp in tracking_in_timeseries_data:
... print(exp['year'],exp['venue'],exp['count'])
2017-01-01 00:00:00+00:00 4 1
2019-01-01 00:00:00+00:00 2 2
2019-01-01 00:00:00+00:00 3 1
2019-01-01 00:00:00+00:00 4 1
2019-01-01 00:00:00+00:00 5 1
2019-01-01 00:00:00+00:00 6 1
>>> tracking_in_timeseries_data
<QuerySet [{'venue': 4,'year': datetime.datetime(2017,1,tzinfo=<UTC>),'count': 1},{'venue': 2,'year': datetime.datetime(2019,'count': 2},{'venue': 3,{'venue': 4,{'venue': 5,{'venue': 6,'count': 1}]>
如果我将其序列化,则会产生以下结果:
serializer.py
class TimeseriesYearSerializer(serializers.ModelSerializer):
venue = VenueTSSerializer(read_only=True)
year = serializers.DateTimeField(read_only=True)
count = serializers.IntegerField(read_only=True)
class Meta:
model = Tracking
fields = ['venue','year','count']
输出:
[
{
"count": 1,"year": "2017-01-01T00:00:00+03:00","venue_id": 2
},{
"count": 1,"year": "2018-01-01T00:00:00+03:00","venue_id": 1
},{
"count": 3,"year": "2019-01-01T00:00:00+03:00","venue_id": 2
}
]
如何确保TruncYear queryset在Zulu时间中生成像这样的日期时间字符串,如2019-10-01T00:00:00Z,而不是时区为2019-01-01T00:00:00 + 03:00。
更新: 我注意到我通过重新启动django服务来临时修复此问题。
sudo supervisorctl stop all
sudo supervisorctl start all
然后它能够产生这样的Z时间2019-10-01T00:00:00Z 但是几个小时后,它开始产生像这样的时区timeformat 2017-01-01T00:00:00 + 03:00
我还注意到如果我重新启动服务器,它将没有Z时间。我必须停止并启动supervisorctl,然后暂时修复它。
这是我重启主管的代码段
/home/user/myapp/gunicorn_start.bash
/etc/supervisor/conf.d/myapp.conf
https://gist.github.com/axilaris/01525b78fcdc03071fcd34818820d7f1
这是我的服务器版本Ubuntu 16.04.3 LTS
可能是什么问题,以及如何解决它,以使其持续产生祖鲁时间。