neo4j 如果日期时间具有不同的偏移量(时间段),如何比较它们?

iyr7buue  于 2022-11-29  发布在  其他
关注(0)|答案(2)|浏览(150)

如果日期时间位于不同的时区,日期时间比较应如何进行。
例如:

WITH datetime("2022-11-01T08:00+01:00") AS d1, datetime("2022-11-01T07:00") AS d2
RETURN d1=d2

返回false!
我在OSX下使用的是4.4.12社区版。
更奇怪的是下面的话:

WITH datetime("2022-11-01T08:00:00+01:00") AS d1, datetime("2022-11-01T07:00") AS d2
RETURN duration.between(d1,d2)

结果:PT0S

WITH datetime("2022-11-01T08:00:00+01:00") AS d1, datetime("2022-11-01T07:00") AS d2
RETURN d1.year, d2.year, d1.month, d2.month, d1.day, d2.day, d1.hour, d2.hour, d1.minute, d2.minute, d1.second, d2.second, d1.millisecond, d2.millisecond, d1.timeZone, d2.timeZone, d1.offset, d2.offset, d1.epochMillis, d2.epochMillis

d1和d2的小时、偏移和时区不同。

wqlqzqxt

wqlqzqxt1#

Charchit的答案是最快的比较方法。或者,你也可以使用持续时间函数来比较秒数的差异,如下所示。

WITH datetime("2022-11-01T08:00+01:00") AS d1, datetime("2022-11-01T07:00") AS d2
RETURN duration.inSeconds(d1, d2)=duration({seconds: 0})

将返回

╒═══════════════════════════════════════════════════╕
│"duration.inSeconds(d1, d2)=duration({seconds: 0})"│
╞═══════════════════════════════════════════════════╡
│true                                               │
└───────────────────────────────────────────────────┘
djp7away

djp7away2#

你正在比较两个Datetime对象,它们的属性不同,这样做是行不通的。你可以简单地比较两个对象的epochMillis,来比较两个日期时间是否相等,而不管时区如何:

WITH datetime("2022-11-01T08:00:00+01:00") AS d1, datetime("2022-11-01T07:00") AS d2
RETURN d1.epochMillis = d2.epochMillis

如果在同一时间、同一时区比较两个datetime示例,则比较结果如预期一样:

WITH datetime("2022-11-01T07:00:00") AS d1, datetime("2022-11-01T07:00") AS d2
RETURN d1 = d2

因此,您看到的行为是正确的,因为要比较复合对象,您需要比较其中的所有键-值对。

相关问题