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