求助关于NEBULA时区的问题

  • nebula 版本:3.60
  • 部署方式:3节点分布式
  • 安装方式:RPM
  • 是否上生产环境:Y
  • 硬件信息
    • SSD
    • 至强26核心 * 2
  • 问题的具体描述
    服务器时间为北京时间(已与时间服务器同步),在nebula-graphd.conf、nebula-storaged.conf、nebula-metad.conf三个文件中增加“–timezone_name=UTC+08:00”参数,这时使用datetime()函数返回的是正确的北京时间,但是如果使用toString(datetime())将当前时间转换为字符串格式,那么时间数值会变成比北京时间晚8小时,即0时区时间。版本已经升级为最新3.60。如何才能让转换后的时间仍然是北京时间?

我们也遇到了类似的datetime时区问题,借此帖提问。

  • nebula 版本:3.4.1

目前并未设置–timezone_name,datetime()会存utc时间。

但碰到timestamp和datetime的时候出现的疑惑现象。如下图

  • datetime(1)并未减去8小时,但datetime(now())是减去了8小时。

  • 看起来datetime转timestamp的时候,会根据系统的时区(东8区)加8小时。

我们情况跟你一样,如果把–timezone_name=UTC+08:00删掉,那么datetime()出来的时间会晚8个小时

datatime落盘是存该timezone对应的utc时间而不是直接以该时间作为raw存盘,因此tostring以后也是utc时间。to string本身不考虑时区,只是根据输入的value做string处理。

timestamp是根据主机时区返回对应时区的时间,建议你用timestamp做转换。

你理解错了,timestamp和now是根据os的时区返回时间,因此以utc+8的格式显示。
所以now()显示了10:39的unix格式。
当你timestamp*(2023-09…)时,括号内的时间是作为unix格式(无视时区,纯作为value考虑)传入的,会被timestamp 添加时区返回。

datetime是存储该时间对应的utc时间。因此now会被以东八区对应的utc时间存储。
所以datetime(now())返回了10:39对应的utc时间2:39。

可以看下我给 @SwimSweet 的回复,对你理解timezone的配置会有帮助

想了下,两个人的问题应该不太一样。
SwimSweet 的问题正如 George 答复;
@guanke 的问题看起来应该是bug。如果像你描述的,那toSting的处理感觉是有点问题。
你可以提个issue,把你之前做的操作的截图放到issue里。

下面这里提:
https://github.com/vesoft-inc/nebula/issues

谢谢各位大佬回复,我把nebula-graphd.conf、nebula-storaged.conf、nebula-metad.conf三个文件中的“–timezone_name=UTC+08:00” 参数删除以后,return toString(datetime());和 return datetime();的结果一样了,但是时间就不是北京时间了,晚了8小时,先这样用着吧

1 个赞

已提issue