如何在不同区域之间传递时间数据?

时间:2013-02-11 13:07:02

标签: django datetime

在我的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_timeend_time字段设置为目标时区(TZ1),即如果我在{{1}的start_time字段中输入'13:00'管理员,它应该是TZ1中的'13:00'。

如何将Taskstart_time值设置为TZ1倍?如果我保留在默认管理员中输入的值,我想时间将设置为服务器时区(TZ2),对吗?

那么将这些值(通过JSON)发送到Android客户端以获得正确的TZ2时间的最佳格式是什么?

现在我正在使用Python Datetime的end_time,它提供类似

的内容
isoformat()

但它没有时区数据......

1 个答案:

答案 0 :(得分:1)

这不是处理时区的最佳方式。

最好的方法是尽早将时间转换为UTC,并尽可能晚地将其转换回来。

换句话说,如果我在此输入当前时间为Feb 11, 21:03,则永远不会存储。相反,它应该在任何其他事件发生之前更改为UTC。

就是这样,无论发生什么事,都是正确的。如果我将它发送到内蒙古,它应该保持为UTC直到有人想要看它。然后,只有它才能被转换(并仅用于显示)。

遵循该规则可以为任何必须跨多个时区工作的软件带来很多麻烦。相信我,我们修改了一个主要的Telco,因为他们实施了一些可以通过线路发送时区的可怕系统,这意味着每个点都必须能够转换到每个时区。< / p>

尽快让他们进入UTC,只让他们按需回来,节省了大量的时间和金钱。