sqlite3中的Python日期时间

sqlite3中的Python日期时间,第1张

概述我在 Python 2.7中对sqlite3 datetime对象有一个奇怪的问题.运行此示例: import sqlite3import datetimecon = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)cur = con.cursor()cur.e 我在 Python 2.7中对sqlite3 datetime对象有一个奇怪的问题.运行此示例:

import sqlite3import datetimecon = sqlite3.connect(":memory:",detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_ColnameS)cur = con.cursor()cur.execute("create table test(d date,ts timestamp)")today = datetime.date.today()Now = datetime.datetime.Now()cur.execute("insert into test(d,ts) values (?,?)",(today,Now))cur.execute("select d,ts from test")row = cur.fetchone()print today,"=>",row[0],type(row[0])print Now,row[1],type(row[1])cur.execute('select current_date as "d [date]",current_timestamp as "ts [timestamp]"')row = cur.fetchone()print today,type(row[1])

给我这个输出:

2012-02-10 => 2012-02-10 <type 'datetime.date'>2012-02-10 08:17:10.222291 => 2012-02-10 08:17:10.222291 <type 'datetime.datetime'>2012-02-10 => 2012-02-09 <type 'datetime.date'>2012-02-10 08:17:10.222291 => 2012-02-09 19:17:10 <type 'datetime.datetime'>

使用PARSE_ColnameS方法时重试的日期时间似乎是错误的.这是为什么?

请注意,此示例来自Python docs

解决方法 从您显示的输出中,您看起来像是在新西兰时区(UTC-12或UTC-11,观察到夏令时).问题是PARSE_ColnameS如何将转换器用于python类型 – 一个是UTC,一个是使用可用于本地时间的时区信息(是的,我称之为转换器中的错误).

请参阅下面我用于股票价格数据的适配器,以便为我知道的时区一致地转换数据(您可以调整它以匹配您的时区,或添加一些代码来调整检测到的时区):

def adapt_datetime(dt):    # Get the datetime for the POSIX epoch.    epoch = datetime.datetime.utcfromtimestamp(0.0)    elapsedtime = dt - epoch    # Calculate the number of milliseconds.    seconds = float(elapsedtime.days)*24.*60.*60. + float(elapsedtime.seconds) + float(elapsedtime.microseconds)/1000000.0    return secondsdef convert_datetime(tf):    # Note: strange math is used to account for daylight savings time and     #    times in the Eastern (US) time zone (e.g. EDT)    tf = float(tf)    edt_adjustment = 6 * 60. * 60.    if time.localtime(tf).tm_isdst:        edt_adjustment = 5 * 60. * 60.    return datetime.datetime.fromtimestamp(tf+edt_adjustment)sqlite3.register_adapter(datetime.datetime,adapt_datetime)sqlite3.register_converter("datetime",convert_datetime)

您可以在github上的this bit of code中看到所有这些.

总结

以上是内存溢出为你收集整理的sqlite3中的Python日期时间全部内容,希望文章能够帮你解决sqlite3中的Python日期时间所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1150214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存