处理 android 和 django 时使用什么日期格式?

What date format to use when dealing with android and django?

ISO 8601? 例如 django 很适合这种格式:

ValidationError at /locations/new_tracks/1351320785
["'1351320785' value has an invalid format. It must be in YYYY-MM-DD  HH:MM[:ss[.uuuuuu]][TZ] format."]

还是unixtime? 有一个时区对我来说很重要。 问是因为我没有处理用两种不同框架编写的服务器-客户端系统的经验。

Django 几乎总是使用适合底层数据库的 date/time 类型的数据库字段以 UTC 时间在内部存储日期。您不能直接访问它 - 当 reading/writing 数据库时它将被转换为 to/from 一个 Python "datetime" 对象,详细描述 in the Python docs. Converting between Unix time (specifically POSIX time which is specified in terms of UTC) and Python datetimes in UTC time is straightforward using datetime.datetime.utcfromtimestamp and time.mktime(t.timetuple()). Converting between Python datetimes and ISO 8601 can be done with the iso8601 package.

如果您需要支持本地时区 date/times,即使只是一个本地时区,您也应该启用时区支持,详见 the Django time zones documentation。这会增加复杂性,但正如文档所述,"This shields you from subtle and unreproducible bugs around Daylight Saving Time (DST) transitions."

错误消息明确说明您应该使用哪种格式:

It must be in YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format.

如果您只有 Unix 时间,则将其转换为 UTC 时间(由 datetime 对象表示)并使用 RFC 3339 time format (a profile of ISO 8601):

对其进行序列化
>>> from datetime import datetime
>>> datetime.utcfromtimestamp(1351320785).isoformat() + 'Z'
'2012-10-27T06:53:05Z'

如果您的 android 客户端不理解 rfc 3339,请尝试变体:

>>> datetime.utcfromtimestamp(1351320785).isoformat(' ') + '+00:00'
'2012-10-27 06:53:05+00:00'
>>> datetime.utcfromtimestamp(1351320785).isoformat(' ') + '+0000'
'2012-10-27 06:53:05+0000'

.strftime() method provides even more flexibility.