傳輸日期時間值的最佳格式是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格式。
時區是否會涉及? –
是的。該應用程序旨在支持多種語言,因此不同的時區。 – eff8691