gpt4 book ai didi

python - OrientDB:服务器和数据库之间时区不同的 python 中 SELECT 的日期时间转换问题

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:52 24 4
gpt4 key购买 nike

我的系统和相关设置:

  • Linux(在 Ubuntu 和 Debian 中都尝试过)
  • Python 2.7.11
  • pyorient 1.4.6a0
  • 东方数据库2.1.8
  • 工作室2.1
  • 服务器时区“欧洲/罗马”(CET/CEST)
  • OrientDB 时区“UTC”

由于像 here 所描述的那样的日期时间插入问题,我不得不将 OrientDB 时区设置为“UTC”:

ALTER DATABASE TIMEZONE UTC

在 python 中对日期时间对象执行 SELECT 时,将服务器时区设置为“欧洲/罗马”会产生一些问题。例如:

select distinct(tstamp_ini) as ini from Fct order by ini desc limit 1

在 Studio 中,命令返回我所期望的结果:

2016-03-22 12:00:00 

在 python 中我有不同的结果:

print result[0]
{{'ini': datetime.datetime(2016, 3, 22, 13, 0)},'version':0,'rid':'#-2:139359'}

res=result[0].ini
print res
2016-03-22 13:00:00
print type(res)
<type 'datetime.datetime'>
print res.tzinfo
None

我希望 python 中的结果日期时间与 Studio 中的相同。

最佳答案

如上所述here在 pyorient (serializations.py) 中,日期和日期时间使用本地时间进行编码和解码。这会产生链接中描述的几个问题以及问题中描述的问题。

一个可能的解决方案是更改serialization.py,以便所有内容都被视为UTC。

def _encode_value(self, value):

添加

from calendar import timegm

更改日期时间

elif isinstance(value, datetime):
ret = str(int(time.mktime(value.timetuple())) * 1000) + 't'

elif isinstance(value, datetime):
ret = str(int(timegm(value.timetuple())) * 1000) + 't'

更改日期

elif isinstance(value, date):
ret = str(int(time.mktime(value.timetuple())) * 1000) + 'a'

elif isinstance(value, date):
ret = str(int(timegm(value.timetuple())) * 1000) + 'a'

def _parse_number(self, content):

更改日期

if c == 'a':
collected = date.fromtimestamp(float(collected) / 1000)

if c == 'a':
collected = datetime.utcfromtimestamp(float(collected) / 1000).date()

更改日期时间

elif c == 't':
collected = datetime.fromtimestamp(float(collected) / 1000)

elif c == 't':
collected = datetime.utcfromtimestamp(float(collected) / 1000)

关于python - OrientDB:服务器和数据库之间时区不同的 python 中 SELECT 的日期时间转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36309515/

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