PYQT4 PostgreSQL QSQLQUERY BC信息损失



pyqt4 postgresql qsqlquery bc信息损失

我正在使用pyqt4和postgresql编程,我有一个问题在基督面前阅读日期(BC)。使用PSQL,一切都可以:

# SELECT id, born, givname FROM person WHERE id=100000;
   id   |     born      | givname 
--------+---------------+---------
 100000 | 0428-01-01 BC | Plato
(1 row)

,但这似乎是当年的标志,即卑诗/广告信息,从PostgreSQL Server的途中丢失了到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

问题:卑诗省信息在哪里丢失,我该如何获得?

回答海报的问题:

日期库中存储的实际朱利安日整数值是什么?

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

in Postgresql :( www.postgresql.org/docs/9.0/static/functions-formatting.html)朱利安·戴(Julian Day)(自公元前4714年11月24日以来的日子)postgresql返回选择的选择('4714-11-24 bc':: date);

QT在朱利安日有不同的定义。来自pyqt.sourceforge.net/docs/pyqt4/qdate.html#fromjulianday:"有效日期的范围是公元前4713年1月2日。"。(也许这就是少年朱利安日历和如Ekhumoro的《邮报》中的Propict Gregorian日历。)

请注意,公元1月1日,公元前4713年似乎没有被认为有效:

>>> 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卑诗省的符号似乎不是ISO,而是一年的标志。这导致下一个问题:我可以配置服务器,所以产量'-0428-01-01',而不是'0428-01-01 bc'?

好吧,它比解决方案更重要但是正如Ekhumoro所建议的那样,我可以检索日期作为字符串(postgresql中的文本),就像这样:

SELECT born::TEXT FROM person WHERE id=100000;

给出结果:

0428-01-01 BC

作为字符串,我可以为BC后缀解析。

也可以使用整数值,但是然后我必须处理Proptic Julian(Qt)与Proplettic Gregorian(PostgreSQL)日期之间的差异,这似乎更为复杂。

相关内容

  • 没有找到相关文章

最新更新