2

我需要在 android 客户端、python 服务器和 mysql 服务器之间传递日期时间。

它应该工作如下:

  • android客户端将确切的时间从客户端发送到cherrypy python服务器(我猜datetime对象应该作为字符串发送?)
  • 服务器必须将此字符串解析为有用的东西,以便作为日期时间对象使用

现在有两种情况:

  1. datetime对象应该写入mysql数据库(相关数据库表中有一个DATETIME类型的属性)
  2. 服务器应从 mysql 数据库中检索日期时间并将其与解析的日期时间对象进行比较

在某些后台进程使用 python 日期时间对象作为输入参数完成工作后,应将新的日期时间对象传递回 android 客户端

有谁知道解决这些问题的好方法?

4

1 回答 1

1

传输日期时间值的最佳格式是ISO 8601 标准;它们采用格式YYYY-mm-ddTHH:MM:SS+tz:tz,其中T是可选的。

Python 的datetime.datetime类可以使用一个简单的额外模块来解析这些(请参阅如何解析 ISO 8601 格式的日期?)。.isoformat()使用该方法输出同样简单。

MySQL 的 DATETIME 列类型仅处理 UTC 值,但默认情况下接受 ISO 8601 日期时间字符串(使用空格而不是 a T),因此您必须将日期时间对象转换为 UTC(上面提到的 iso8601 模块的示例):

import iso8601
utciso8601 = dt.astimezone(iso8601.iso8601.UTC).isoformat(' ')[:19]

我也会将时区偏移量插入数据库;只需使用该tzname()方法从对象中检索它,然后在使用该函数datetime从 MySQL 加载时再次解析它。iso8601.iso8601.parse_timezone()

# insertion:
cursor.execute('INSERT INTO dates VALUES(?, ?)', utciso8601, dt.tzname())

# querying
for row in query:
    timezone = iso8601.iso8601.parse_timezone(row[1])
    utcdt = iso8601.parse_date(row[0])
    dt = utcdt.astimezone(timezone)

我不知道 Android 处理日期和时间的能力如何,但它肯定可以很好地处理 ISO 8601 格式。

于 2012-09-11T15:29:33.997 回答