我需要使用Python将日期时间插入到Sqlite数据库中。 (我已经阅读了this question,这里不重复,因为我处理的是时区问题。)
datetime
方法#1似乎是在Sqlite数据库中插入Sat Mar 10 2018 12:12:00 GMT+0100 (Paris, Madrid)
对象的自然方式,但它不会保存时区。 < / p>
我以string
的形式收到用户输入。方法#2似乎只将其作为day1
保存到数据库中,这不是很好:然后我们无法轻松查询日期介于day2
之间的所有行例如Sat Mar 10 2018 12:12:00 GMT+0100 (Paris, Madrid)
。
问题:我应该使用其他方法,并转换datetime
,并在Sqlite DB中插入此UTC吗?
或者我应该仅在数据库中将UNIX时间戳作为整数插入?
注意:我可以放弃原始时区,如果它已正确转换为UTC:当我从数据库查询并在网页上显示输出时,我就是&#39; ll使用用户浏览器时区格式化。
注2:根据https://www.sqlite.org/datatype3.html#date_and_time_datatype,似乎Sqlite没有unlist
类型,它存储为TEXT,REAL或INT。但它如何在内部知道在这些选择中使用什么?
答案 0 :(得分:1)
列t不是“真正的”日期时间。根据:https://docs.python.org/2/library/sqlite3.html#default-adapters-and-converters,python添加了“timestamp”类型,以便于将datetime对象轻松插入到sqlite中。这些对象在存储在sqlite中时会转换为字符串。 sqlite仅支持以下数据类型:https://www.sqlite.org/datatype3.html
根据https://www.sqlite.org/lang_datefunc.html,sqlite在内部使用UTC时间。我认为您存储时间的最简单方法是在插入之前将它们转换为UTC或Unix时间。
如果你的时间是当地时间,你可以这样转换:How do I convert local time to UTC in Python?
如果您的时间不在当地时间,转换它们会有点复杂,因为Python没有在标准库中定义任何时区。这里你最好的选择可能是使用如下所述的库:https://stackoverflow.com/a/4771733/6180687
如果您已经拥有它,我建议您使用Unix时间,以使您的生活更轻松。