在我的Django应用程序中,我有一个Task
模型,其中包含一些日期和时间字段:
class Task(models.Model):
date = models.DateField()
start_time = models.TimeField(help_text='hh:mm')
end_time = models.TimeField(help_text='hh:mm')
# more stuff
我会向一些Android客户端发送一些Task
个实例,这些客户端将位于与我的服务器时区(TZ2)不同的时区(TZ1)中。
必须将start_time
和end_time
字段设置为目标时区(TZ1),即如果我在{{1}的start_time
字段中输入'13:00'管理员,它应该是TZ1中的'13:00'。
如何将Task
和start_time
值设置为TZ1倍?如果我保留在默认管理员中输入的值,我想时间将设置为服务器时区(TZ2),对吗?
那么将这些值(通过JSON)发送到Android客户端以获得正确的TZ2时间的最佳格式是什么?
现在我正在使用Python Datetime的end_time
,它提供类似
isoformat()
但它没有时区数据......
答案 0 :(得分:1)
这不是处理时区的最佳方式。
最好的方法是尽早将时间转换为UTC,并尽可能晚地将其转换回来。
换句话说,如果我在此输入当前时间为Feb 11, 21:03
,则永远不会存储。相反,它应该在任何其他事件发生之前更改为UTC。
就是这样,无论发生什么事,都是正确的。如果我将它发送到内蒙古,它应该保持为UTC直到有人想要看它。然后,只有它才能被转换(并仅用于显示)。
遵循该规则可以为任何必须跨多个时区工作的软件带来很多麻烦。相信我,我们修改了一个主要的Telco,因为他们实施了一些可以通过线路发送时区的可怕系统,这意味着每个点都必须能够转换到每个时区。< / p>
尽快让他们进入UTC,只让他们按需回来,节省了大量的时间和金钱。