java - Android Python MySQL 日期时间解析

标签 java android python mysql datetime

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

它应该工作如下:

  • android 客户端从客户端向 cherrypy python 服务器发送准确的时间(我猜 datetime 对象应该作为字符串发送?)
  • 服务器必须将这个字符串解析成有用的东西作为日期时间对象来使用

现在有两种情况:

  1. datetime对象要写入mysql数据库(相关数据库表中有一个DATETIME类型的属性)
  2. 服务器应从 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() methoddatetime 对象中检索它,然后在使用 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/

相关文章:

java - 错误 "E/MediaPlayer: Should have subtitle controller already set"导致没有音频播放

java - 如果语句不适用于 JTextfield 到字符串的比较

android - 如何生成 React Native Android jni 库

java - 如何修复在 tablayout 之间切换时谷歌登录选项功能重复并崩溃的问题

java - 使用 google commons 创建集合实例的通用 vs 静态声明

java - 为什么 @ApiModelProperty 注释的 "example"属性中有多余的反斜杠?

android - 获取 OpenGL 最大纹理大小

python - Ansible - 对输出应用过滤器,然后注册为变量

python - 斐波那契特定数字生成器 python

python - flask:跨 View 函数传递参数