Neo4j中duration.between与duration.inSeconds计算时间差结果为何不同?
问题分析与解答
最直接原因:计算的时间区间完全不同
你第一个查询计算的是**datetime1(2022-02-02T15:25:33)和datetime2(2022-02-02T22:06:12)**之间的分钟差,这两个时间属于同一天,间隔约6小时40分钟。
而第二个查询计算的是**date1(2022-04-08)和date2(2022-09-20)**之间的秒数转分钟,这两个日期间隔5个月12天,结果自然和前者完全不同。
就算用同一组时间,两种计算逻辑也有差异
假设你是笔误,想用datetime1和datetime2测试第二个查询,两种方式的结果仍会有细微区别:
duration.between(x.datetime1, x.datetime2).minutes直接提取duration对象的分钟部分,取的是总分钟数的整数部分(比如总间隔400分39秒,返回值为400)。duration.inSeconds(x.datetime1, x.datetime2).seconds/60先计算总秒数再除以60,结果是带小数的浮点数(比如400.65)。
另外,针对date类型使用duration.inSeconds时,会自动将日期视为当天的00:00:00时间点计算秒数,而datetime是精确到具体时分秒的,这也是两类时间类型计算逻辑的本质区别。
验证示例
如果修正第二个查询为使用datetime1和datetime2:
match (x:Test) return duration.inSeconds(x.datetime1, x.datetime2).seconds/60
返回结果为400.65,而第一个查询返回400,这就是两者的差异所在。
内容的提问来源于stack exchange,提问作者drdot
相关产品推荐
相关产品推荐

