0

在我的 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

我将向Task一些 Android 客户端发送一些实例,这些客户端将位于与我的服务器时区 (TZ2) 不同的时区 (TZ1)。

和字段必须设置为目标时区(TZ1),即如果我在管理员字段中输入“13:00” start_time,则在TZ1 中应为“13:00”。end_timestart_timeTask

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

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

现在我正在使用 Python Datetime's isoformat(),它给出了类似的东西

2013-02-11T13:17:23.811680

但它没有时区数据...

4

1 回答 1

1

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

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

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

就是这样,不管发生什么,都是对的。如果我将它发送到内蒙古,它应该一直保持为 UTC,直到有人想要查看它。然后并且只有在那时才应该转换它(并且仅用于显示)。

遵循该规则将为您在必须跨多个时区工作的任何软件中节省很多麻烦。相信我,在他们实施了一些通过网络发送时区的可怕系统之后,我们修复了一家大型电信公司,这意味着每个点都必须能够与每个时区相互转换。

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

于 2013-02-11T13:11:00.180 回答