PyQt4 PostgreSQL QSqlQuery BC信息丢失
我正在用PyQt4和PostgreSQL编程,我遇到了一个问题 阅读基督之前的日期(公元前)。使用psql,一切正常:
# SELECT id, born, givname FROM person WHERE id=100000;
id | born | givname
--------+---------------+---------
100000 | 0428-01-01 BC | Plato
(1 row)
但它似乎是一年的标志,也就是公元前/公元前的信息, 在从PostgreSQL服务器来的路上丢失了 到PyQt QSqlQuery类。你知道吗
请参见以下Python代码段:
from PyQt4.QtSql import QSqlQuery
sql = 'SELECT born FROM person WHERE id=100000'
query = QSqlQuery(sql)
query.next()
v = query.value(0)
print "v:", v
print "type:", type(v)
print "typename:", v.typeName()
d = v.toDate()
print "valid:", d.isValid()
print "d:", d, d.toString()
print 'dd.MM.yyyy:', d.toString('dd.MM.yyyy')
print "year:", d.year() # should be negative
print "toPyDate:", d.toPyDate()
print "toJulianDay:", d.toJulianDay()
输出:
v: <PyQt4.QtCore.QVariant object at 0xb216cd84>
type: <class 'PyQt4.QtCore.QVariant'>
typename: QDate
valid: True
d: PyQt4.QtCore.QDate(428, 1, 1) So. Jan 1 428
dd.MM.yyyy: 01.01.0428
year: 428
toPyDate: 0428-01-01
toJulianDay: 1877385
问题: BC信息在哪里丢失?如何获取?你知道吗
对海报问题的回答:
存储在数据库中的实际儒略日整数值是多少?你知道吗
volker=# SELECT id, born, extract(julian from born), givname FROM person WHERE id=100000;
id | born | date_part | givname
--------+---------------+-----------+---------
100000 | 0428-01-01 BC | 1565102 | Plato
在PostgreSQL中:(www.postgresql.org/docs/9.0/static/functions-formatting.html) 儒略日(公元前4714年11月24日午夜后的日子) PostgreSQL为SELECT EXTRACT返回0(JULIAN FROM'4714-11-24 BC'::DATE)
Qt对朱利安日有不同的定义。 从pyqt.sourceforge.net/Docs/PyQt4/qdate.html#来自Julianday: 有效日期范围为公元前4713年1月2日。 (也许这就是朱利安历法和 前公历前公历,如ekhumoro在《邮报》中所说。)
请注意,公元前4713年1月1日似乎不被认为是有效的:
>>> j1 = QDate.fromJulianDay(1)
>>> print j1.getDate()
(-4713, 1, 2)
>>> print j1.toString()
Di. Jan 2 -4713
>>> j0 = QDate.fromJulianDay(0)
>>> print j0.toString()
>>> print j0.getDate()
(-4713, 1, 1)
但数据库中存储的实际值是多少? 我不知道服务器内部存储了什么,我只需要 作为它传递给psql客户机的引用, 这似乎是ISO日期字符串, 格式为YYYY-MM-DD,BC年份附加“BC”。 顺便说一下,阅读https://en.wikipedia.org/wiki/ISO_8601#Years 似乎BC符号不是ISO,但年份符号是。 这就引出了下一个问题:我可以配置服务器使其 产生'-0428-01-01'而不是'0428-01-01 BC'?你知道吗
好吧,与其说是解决办法,不如说是变通办法, 但正如ekhumoro所说,我可以找回日期 作为字符串。PostgreSQL中的文本),简单如下:
给出结果:
作为字符串,我可以解析为BC后缀。你知道吗
使用整数值也是可能的,但是接下来我必须处理proleptic Julian(Qt)和proleptic Gregorian(PostgreSQL)日期之间的差异,这似乎更复杂。你知道吗
相关问题 更多 >
编程相关推荐