将sqlite3时间戳转换为python中的纪元时间

时间:2014-01-11 08:25:00

标签: python datetime sqlite epoch

我想将我从sqlite3数据库中选择的日期时间转换为unixepoch。我想,一种简单的方法是在unixepoch中的数据库中插入时间戳,但我宁愿不这样做,因为它会降低我的数据库的可读性。

conn = sqlite3.connect('test.db')
c = conn.cursor() 
c.execute('CREATE TABLE if not exists table_name (datetime text, column1 real, column2 real)')
cur.execute("INSERT INTO table_name VALUES (datetime(CURRENT_TIMESTAMP, 'localtime'),?,?)", data)
c.execute("SELECT datetime from table_name")

#here I would like to convert the above selection (datetime in localtime) to unixepoch

感谢您阅读本文!

1 个答案:

答案 0 :(得分:1)

sqlite3数据库已经附带一个适配器,用于将ISO日期时间格式解释为datetime.datetime() objects

c.execute('SELECT datetime as "datetime [timestamp]" from table_name')
for datetime, in c:
    print type(datetime)

这将为每行打印<type 'datetime.datetime'>datetime.datetime()对象比UNIX纪元偏移更加灵活和强大。

注意as "datetime [timestamp]"别名;这会将类型信息添加到列中,覆盖text定义中该列的CREATE TABLE类型,允许Python应用类型适配器。如果您将列声明为timestamp,则甚至不必使用别名:

c.execute('CREATE TABLE if not exists table_name (datetime timestamp, column1 real, column2 real)')

如果您 使用UNIX纪元偏移,您可以使用time.mktime() functiondatetime.datetime.timetuple() method转换它们:

timeoffset = time.mktime(datetime.timetuple())