【问题标题】:Android Python MySQL Datetime ParsingAndroid Python MySQL 日期时间解析
【发布时间】:2012-09-04 13:19:35
【问题描述】:

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

它应该如下工作:

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

现在有两种情况:

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

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

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

【问题讨论】:

  • 会涉及时区吗?
  • 是的。该应用程序旨在支持多种语言,因此支持不同的时区。

标签: java android python mysql datetime


【解决方案1】:

传输日期时间值的最佳格式是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 格式。

【讨论】:

  • 感谢您的回答。要在 android 应用程序中使用日期时间对象的对象,您必须使用 java.util 包中的类(也就是说,您可以将 Java SDK 中的所有内容用于您的 android 应用程序)。现在,我在 GregorianCalendar 对象的帮助下获得了实际的日期时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 1970-01-01
  • 2022-01-22
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多