gpt4 book ai didi

sqlite3 中的 Python 日期时间

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:12 33 4
gpt4 key购买 nike

我对 Python 2.7 中的 sqlite3 日期时间对象有一个奇怪的问题。运行这个例子:

import sqlite3
import datetime

con = 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, "=>", row[0], type(row[0])
print now, "=>", row[1], 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 seconds


def 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)

您可能会在 this bit of code 中看到所有这一切。在 github 上。

关于sqlite3 中的 Python 日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9217411/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com