我有单字符串格式的日期和时间“2016-03-28T20:23:46 + 0800”。如何将其转换为日期时间格式Sqlite3支持“datetime”域?我正在使用python在数据库中读/写数据。
我知道使用python可以实现:
>>> str = "2016-03-28T20:23:46+0800"
>>> temp = str.split('T')
>>> temp[1] = temp[1].rstrip('+')
>>> temp[1]
'20:23:46+0800'
>>> temp[1] = temp[1].split('+')[0]
>>> result = " ".join(temp)
>>> result
'2016-03-28 20:23:46'
但也许给定的字符串有可转换的格式?
答案 0 :(得分:1)
日期时间格式,一种解决方法是使用数字序列作为日期时间,例如:
def Strtime2Num(result):
date_object = datetime.strptime(Strtime,"%Y-%m-%dT%H:%M%S+0800")
Strtime = date_object.strftime('%Y%m%d%H%M')
return int(result)
在sql命令中选择时,可以使用
con.execute(UPDATE YearUpdateCapa SET %s = %d WHERE DateTime >= %d AND DateTime <= %d' % (name, avail,start,end))
答案 1 :(得分:1)
sqlite3
不会产生错误,直到您尝试将值选回 datetime
object 。要验证输入日期/时间字符串convert it to datetime.datetime
first。 sqlite3
模块可以自动转换datetime.datetime
:
#!/usr/bin/env python3
import sqlite3
from datetime import datetime
db = sqlite3.connect(':memory:')
db.execute('CREATE TABLE dates (timestamp TIMESTAMP)')
db.executemany('INSERT INTO dates VALUES(?)',
[[datetime.utcnow()], ['2016-03-28 20:23:46.000000+0800']])
print(*db.execute('SELECT timestamp FROM dates'), sep='\n')
('2016-05-14 05:08:52.487113',)
('2016-03-28 20:23:46.000000+0800',)
TIMESTAMP
字段接受ISO 8601格式'YYYY-MM-DD HH:MM:SS.mmmmmm'
或datetime.datetime
对象的字符串。
To return datetime.datetime()
back, you could use detect_types=sqlite3.PARSE_DECLTYPES
(如果您需要时区支持; define your own converter返回时区感知日期时间对象。)