我需要在 android 客户端、python 服务器和 mysql 服务器之间传递日期时间。
它应该工作如下:
- android 客户端从客户端向 cherrypy python 服务器发送准确的时间(我猜 datetime 对象应该作为字符串发送?)
- 服务器必须将这个字符串解析成有用的东西作为日期时间对象来使用
现在有两种情况:
- datetime对象要写入mysql数据库(相关数据库表中有一个DATETIME类型的属性)
- 服务器应从 mysql 数据库中检索日期时间并将其与解析的日期时间对象进行比较
一些后台进程以python datetime对象作为输入参数完成工作后,应该将一个新的datetime对象传回android客户端
有人知道解决这些问题的好方法吗?
最佳答案
传输日期时间值的最佳格式是 ISO 8601 standard ;它们采用 YYYY-mm-ddTHH:MM:SS+tz:tz
格式,其中 T
是可选的。
Python 的 datetime.datetime
类可以用一个简单的额外模块解析这些(参见 How to parse an ISO 8601-formatted date? )。 .isoformat()
method 的输出同样简单.
MySQL 的 DATETIME 列类型仅处理 UTC 值,但默认情况下接受 ISO 8601 日期时间字符串(使用空格而不是 T
),因此您必须将日期时间对象转换为 UTC (上面提到的 iso8601 模块的例子):
import iso8601
utciso8601 = dt.astimezone(iso8601.iso8601.UTC).isoformat(' ')[:19]
我也会将时区偏移量插入到数据库中;只需使用 tzname()
method从 datetime
对象中检索它,然后在使用 iso8601.iso8601.parse_timezone()
函数从 MySQL 加载时再次解析它。
# 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 格式。
关于java - Android Python MySQL 日期时间解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12372621/