- 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 的问题正如 George 答复;
但 @guanke 的问题看起来应该是bug。如果像你描述的,那toSting的处理感觉是有点问题。
你可以提个issue,把你之前做的操作的截图放到issue里。
谢谢各位大佬回复,我把nebula-graphd.conf、nebula-storaged.conf、nebula-metad.conf三个文件中的“–timezone_name=UTC+08:00” 参数删除以后,return toString(datetime());和 return datetime();的结果一样了,但是时间就不是北京时间了,晚了8小时,先这样用着吧
已提issue