时间值

Cypher® 内置支持处理时间值,这些时间值可以存储为 Neo4j 数据库中节点和关系的属性。本节将讨论 Cypher 如何处理时区,然后更详细地探讨时间值。

时间值类型

下表列出了时间值类型及其支持的组件

类型 日期支持 时间支持 时区支持

DATE

LOCAL TIME

ZONED TIME

LOCAL DATETIME

ZONED DATETIME

DURATION

-

-

-

DATELOCAL TIMEZONED TIMELOCAL DATETIMEZONED DATETIME时间瞬时类型。时间瞬时值表示时间点,具有不同的精度。

相反,DURATION 不是时间瞬时类型。DURATION 表示时间量,捕获两个瞬时之间的时间差,可以为负值。DURATION 捕获两个瞬时之间的时间量,不捕获开始时间和结束时间。

从 Neo4j 5.9 开始,某些时间类型已重命名。下表显示了当前和旧的时间类型名称。

类型 旧类型名称

DATE

Date

LOCAL TIME

LocalTime

ZONED TIME

Time

LOCAL DATETIME

LocalDateTime

ZONED DATETIME

DateTime

DURATION

Duration

时区

时区表示为 UTC 的偏移量,或命名时区的逻辑标识符(这些时区基于 IANA 时区数据库)。在任何情况下,时间都以 UTC 形式存储在内部,时区偏移量仅在显示时间时应用。这意味着时间瞬时可以在不考虑时区的情况下进行排序。但是,如果两个时间在 UTC 中相同,则它们按时区排序。

使用命名时区创建时间时,UTC 的偏移量是根据时区数据库中的规则计算的,以在 UTC 中创建时间瞬时,并确保命名时区是有效的时区。

IANA 时区数据库中的时区规则可能会发生变化。例如,某个区域的夏令时规则可能会发生变化。如果此变化发生在时间瞬时创建之后,则显示的时间可能与最初输入的时间不同,因为涉及到本地时区。但是,UTC 中的绝对时间将保持不变。

在 Cypher 中有三种方法可以指定时区

  • 以小时和分钟为单位指定 UTC 的偏移量 (ISO 8601).

  • 指定命名时区。

  • 同时指定偏移量和时区名称(要求两者匹配)。

有关示例,请参阅 指定时区

命名时区形式使用 IANA 时区数据库的规则来管理夏令时 (DST)。

可以使用配置选项 db.temporal.timezone 配置数据库的默认时区。此配置选项会影响以下函数创建时间类型的行为

  • 获取当前日期和时间,不指定时区。

  • 从其组件创建时间类型,不指定时区。

  • 通过解析 STRING 创建时间类型,不指定时区。

  • 通过组合或选择没有时区组件的值创建时间类型,不指定时区。

  • 截断没有时区组件的时间值,不指定时区。

时间瞬时

指定时间瞬时

时间瞬时由三个部分组成:datetimetimezone。这些部分可以组合起来生成不同的时间值类型。字符 T 是一个字面字符。

时间瞬时类型 部分组成

DATE

<date>

LOCAL TIME

<time>T<time>

ZONED TIME

<time><timezone>T<time><timezone>

LOCAL DATETIME*

<date>T<time>

ZONED DATETIME*

<date>T<time><timezone>

*当 datetime 组合时,date 必须完整;即完全识别特定日期。

指定日期

组件 格式 描述

年份

YYYY

使用至少四个数字指定 (某些情况下适用特殊规则)。

月份

MM

使用从 0112 的两位数字指定。

星期

ww

始终以 W 为前缀,使用从 0153 的两位数字指定。

季度

q

始终以 Q 为前缀,使用从 14 的一位数字指定。

月份中的日期

DD

使用 0131 之间的两位数字指定。

一周中的日期

D

使用 17 之间的单一数字指定。

季度的日期

DD

使用 0192 之间的两位数字指定。

一年中的序数日期

DDD

使用 001366 之间的三位数字指定。

如果年份在 0000 之前或 9999 之后,则以下附加规则适用

  • 负号 - 必须放在 0000 之前的所有年份之前(例如 -3000-01-01)。

  • 正号 + 必须放在 9999 之后的所有年份之前(例如 +11000-01-01)。

  • 年份必须用 - 与下一个组件隔开

    • 如果下一个组件是月份(例如 +11000-01)。

    • 如果下一个组件是一年中的日期(例如 +11000-123)。

如果年份组件以 -+ 为前缀,并且与下一个组件隔开,则 Year 允许包含多达九位数字。因此,年份的允许范围在 -999,999,999 和 +999,999,999 之间。对于所有其他情况,即年份介于 00009999(含)之间,Year 必须正好有四位数字(年份组件被解释为公元纪年(CE)的年份)。

以下格式支持指定日期

格式 描述 示例 示例的解释

YYYY-MM-DD

日历日期:Year-Month-Day

2015-07-21

2015-07-21

YYYYMMDD

日历日期:Year-Month-Day

20150721

2015-07-21

YYYY-MM

日历日期:Year-Month

2015-07

2015-07-01

YYYYMM

日历日期:Year-Month

201507

2015-07-01

YYYY-Www-D

周日期:Year-Week-Day

2015-W30-2

2015-07-21

YYYYWwwD

周日期:Year-Week-Day

2015W302

2015-07-21

YYYY-Www

周日期:Year-Week

2015-W30

2015-07-20

YYYYWww

周日期:Year-Week

2015W30

2015-07-20

YYYY-Qq-DD

季度日期:Year-Quarter-Day

2015-Q2-60

2015-05-30

YYYYQqDD

季度日期:Year-Quarter-Day

2015Q260

2015-05-30

YYYY-Qq

季度日期:Year-Quarter

2015-Q2

2015-04-01

YYYYQq

季度日期:Year-Quarter

2015Q2

2015-04-01

YYYY-DDD

序数日期:Year-Day

2015-202

2015-07-21

YYYYDDD

序数日期:Year-Day

2015202

2015-07-21

YYYY

年份

2015

2015-01-01

最小的组件可以省略。Cypher 会假设省略的组件具有其可能的最低值。例如,2013-06 将被解释为与 2013-06-01 相同的日期。

指定时间

组件 格式 描述

小时

HH

使用 0023 之间的两位数字指定。

分钟

MM

使用 0059 之间的两位数字指定。

SS

使用 0059 之间的两位数字指定。

小数部分

sssssssss

使用 0999999999 之间的数字指定。不需要指定前导零。fractionSecond 的可选子秒组件。这可以使用句点 (.) 或逗号 (,) 与 Second 隔开。fraction 是除了 Second 的两位数字之外的附加数字。

Cypher 不支持闰秒;UTC-SLS带平滑闰秒的 UTC)用于管理 UTC 和 TAI(国际原子时)之间的时间差异。

以下格式支持指定时间

格式 描述 示例 示例的解释

HH:MM:SS.sssssssss

Hour:Minute:Second.fraction

21:40:32.142

21:40:32.142

HHMMSS.sssssssss

Hour:Minute:Second.fraction

214032.142

21:40:32.142

HH:MM:SS

Hour:Minute:Second

21:40:32

21:40:32.000

HHMMSS

Hour:Minute:Second

214032

21:40:32.000

HH:MM

Hour:Minute

21:40

21:40:00.000

HHMM

Hour:Minute

2140

21:40:00.000

HH

小时

21

21:00:00.000

最小的组件可以省略。例如,时间可以使用 HourMinute 指定,省略 Secondfraction。另一方面,指定 HourSecond 的时间,而省略 Minute,是不可能的。

指定时区

时区以以下方式之一指定

  • 作为相对于 UTC 的偏移量。

  • 使用 Z 作为 UTC (±00:00) 时区的简写。

在将时区指定为相对于 UTC 的偏移量时,以下规则适用

  • 时区始终以加号 (+) 或减号 (-) 开头。

    • 正偏移量,即以 + 开头的时区,表示 UTC 以东的时区。

    • 负偏移量,即以 - 开头的时区,表示 UTC 以西的时区。

  • 两位数的小时偏移量紧跟在 +/- 符号之后。

  • 可选的两位数分钟偏移量紧跟在小时偏移量之后,可以选择用冒号 (:) 隔开。

  • 国际日期变更线的时区用 +12:00-12:00 表示,具体取决于国家/地区。

在创建 ZONED DATETIME 时间瞬时类型的值时,也可以使用 IANA 时区数据库中的名称来使用命名时区指定时区。这可以与偏移量一起提供,也可以代替偏移量提供。命名时区放在最后,并用方括号 ([]) 括起来。如果同时提供了偏移量和命名时区,则偏移量必须与命名时区匹配。

以下格式支持指定时区

格式 描述 示例 支持 ZONED DATETIME 支持 ZONED TIME

Z

UTC

Z

±HH:MM

Hour:Minute

+09:30

±HH:MM[ZoneName]

Hour:Minute[ZoneName]

+08:45[Australia/Eucla]

±HHMM

Hour:Minute

+0100

±HHMM[ZoneName]

Hour:Minute[ZoneName]

+0200[Africa/Johannesburg]

±HH

小时

-08

±HH[ZoneName]

Hour[ZoneName]

+08[Asia/Singapore]

[ZoneName]

[ZoneName]

[America/Regina]

时间瞬时的组件

时间瞬时值的组件可以作为属性访问。

时间瞬时值的组件及其支持的位置
组件 描述 类型 范围/格式 DATE ZONED DATETIME LOCAL DATETIME ZONED TIME LOCAL TIME

instant.year

year 组件表示瞬时的天文年编号[1]

INTEGER

至少 4 位数字。有关更多信息,请参阅使用 Year 组件的规则

instant.quarter

一年中的季度组件。

INTEGER

14

instant.month

一年中的月份组件。

INTEGER

112

instant.week

一年中的星期数组件。[2]

INTEGER

153

instant.weekYear

一年中的星期数组件所属的年份[3]

INTEGER

至少 4 位数字。有关更多信息,请参阅使用 Year 组件的规则

instant.dayOfQuarter

一个季度中的日期组件。

INTEGER

192

instant.quarterDay

一个季度中的日期组件(instant.dayOfQuarter 的别名)。

INTEGER

192

instant.day

一个月中的日期组件。

INTEGER

131

instant.ordinalDay

一年中的日期组件。

INTEGER

1366

instant.dayOfWeek

一周中的日期组件(一周的第一天是星期一)。

INTEGER

17

instant.weekDay

一周中的日期组件(instant.dayOfWeek 的别名)。

INTEGER

17

instant.hour

小时组件。

INTEGER

023

instant.minute

分钟组件。

INTEGER

059

instant.second

组件。[4]

INTEGER

059

instant.millisecond

毫秒组件。

INTEGER

0999

instant.microsecond

微秒组件。

INTEGER

0999999

instant.nanosecond

纳秒组件。

INTEGER

0999999999

instant.timezone

时区组件。

STRING

根据时区指定方式,这将是时区名称或格式为 ±HHMM 的相对于 UTC 的偏移量。

instant.offset

时区偏移量。

STRING

格式为 ±HHMM

instant.offsetMinutes

以分钟为单位的时区偏移量。

INTEGER

-1080+1080

instant.offsetSeconds

以秒为单位的时区偏移量。

INTEGER

-64800+64800

instant.epochMillis

1970-01-01T00:00:00+0000 和瞬时之间以毫秒为单位的数字。[5]

INTEGER

对于 1970-01-01T00:00:00+0000 之后的瞬时为正数,对于 1970-01-01T00:00:00+0000 之前的瞬时为负数。

instant.epochSeconds

1970-01-01T00:00:00+0000 和瞬时之间以秒为单位的数字。[6]

INTEGER

对于 1970-01-01T00:00:00+0000 之后的瞬时为正数,对于 1970-01-01T00:00:00+0000 之前的瞬时为负数。

示例

以下是使用各种时间函数解析瞬时值的示例。有关这些时间函数的更多信息,请参见此处

示例 1. datetime

使用日历日期格式解析 ZONED DATETIME

查询
RETURN datetime('2015-06-24T12:50:35.556+0100') AS theDateTime
结果
theDateTime

2015-06-24T12:50:35.556+01:00

行数:1

示例 2. localdatetime

使用序数日期格式解析 LOCAL DATETIME

查询
RETURN localdatetime('2015185T19:32:24') AS theLocalDateTime
结果
theLocalDateTime

2015-07-04T19:32:24

行数:1

示例 3. date

使用周日期格式解析 DATE

查询
RETURN date('+2015-W13-4') AS theDate
结果
theDate

2015-03-26

行数:1

示例 4. time

解析 ZONED TIME

查询
RETURN time('125035.556+0100') AS theTime
结果
theTime

12:50:35.556000000+01:00

行数:1

示例 5. localtime

解析 LOCAL TIME

查询
RETURN localtime('12:50:35.556') AS theLocalTime
结果
theLocalTime

12:50:35.556000000

行数:1

示例 6. date

以下查询显示如何获取 DATE 值的组件

查询
WITH date({year: 1984, month: 10, day: 11}) AS d
RETURN d.year, d.quarter, d.month, d.week, d.weekYear, d.day, d.ordinalDay, d.dayOfWeek, d.dayOfQuarter
结果
d.year d.quarter d.month d.week d.weekYear d.day d.ordinalDay d.dayOfWeek d.dayOfQuarter

1984

4

10

41

1984

11

285

4

11

行数:1

示例 7. datetime

以下查询显示如何获取 ZONED DATETIME 值的日期相关组件

查询
WITH datetime({
  year: 1984, month: 11, day: 11,
  hour: 12, minute: 31, second: 14, nanosecond: 645876123,
  timezone: 'Europe/Stockholm'
}) AS d
RETURN d.year, d.quarter, d.month, d.week, d.weekYear, d.day, d.ordinalDay, d.dayOfWeek, d.dayOfQuarter
结果
d.year d.quarter d.month d.week d.weekYear d.day d.ordinalDay d.dayOfWeek d.dayOfQuarter

1984

4

11

45

1984

11

316

7

42

行数:1

示例 8. datetime

以下查询展示了如何获取ZONED DATETIME值的与时间相关的部分

查询
WITH datetime({
  year: 1984, month: 11, day: 11,
  hour: 12, minute: 31, second: 14, nanosecond: 645876123,
  timezone: 'Europe/Stockholm'
}) AS d
RETURN d.hour, d.minute, d.second, d.millisecond, d.microsecond, d.nanosecond
结果
d.hour d.minute d.second d.millisecond d.microsecond d.nanosecond

12

31

14

645

645876

645876123

行数:1

示例 9. datetime

以下查询展示了如何获取ZONED DATETIME值的 epoch 时间和与时区相关的部分

查询
WITH datetime({
  year: 1984, month: 11, day: 11,
  hour: 12, minute: 31, second: 14, nanosecond: 645876123,
  timezone: 'Europe/Stockholm'
}) AS d
RETURN d.timezone, d.offset, d.offsetMinutes, d.epochSeconds, d.epochMillis
结果
d.timezone d.offset d.offsetMinutes d.epochSeconds d.epochMillis

"Europe/Stockholm"

"+01:00"

60

469020674

469020674645

行数:1

示例 10. date.truncate

获取当前年份的第一天

查询
RETURN date.truncate('year') AS day
结果
day

2022-01-01

行数:1

示例 11. date.truncate

获取特定日期所在周的星期四的日期

查询
RETURN date.truncate('week', date('2019-10-01'), {dayOfWeek: 4}) AS thursday
结果
thursday

2019-10-03

行数:1

持续时间

指定持续时间

DURATION表示时间量,捕获两个时刻之间的时间差,可以为负。

DURATION的规范以P为前缀,可以使用基于单位的形式基于日期和时间的形式

  • 基于单位的形式:P[nY][nM][nW][nD][T[nH][nM][nS]]

    • 方括号([])表示可选组件(值为零的组件可以省略)。

    • n表示 64 位整数范围内的数值。

    • 最后一个(也是最小的)组件的值可以包含小数部分。

    • 每个组件必须以表示单位的组件标识符结尾。

    • 基于单位的形式使用M作为月份和分钟的后缀。因此,时间部分必须始终以T为前缀,即使日期部分没有给出任何组件。

    • 持续时间的最大总长度受 64 位整数可以容纳的秒数限制。

  • 基于日期和时间的形式:P<date>T<time>

    • 与基于单位的形式不同,此形式要求每个组件都必须在有效的LOCAL DATETIME的范围内。

下表列出了基于单位形式的组件标识符

组件标识符 描述 注释

Y

M

必须在T之前指定。

W

D

H

小时

M

分钟

必须在T之后指定。

S

持续时间的组件

DURATION可以有多个组件,每个组件都分为月份天数秒数组。

DURATION值的组件在其组件组内截断,如下所示

一阶DURATION组件
组件组 组件 描述 类型 详细信息

duration.years

的总数。

INTEGER

每组4季度计算为1;每组12计算为1

duration.quarters

季度的总数。

INTEGER

计算为4季度;每组3计算为1季度

duration.months

的总数。

INTEGER

计算为12;每个_季度_计算为3

duration.weeks

的总数。

INTEGER

每组7计算为1

duration.days

的总数。

INTEGER

计算为7

duration.hours

小时的总数。

INTEGER

每组60分钟计算为1小时;每组3600计算为1小时

duration.minutes

分钟的总数。

INTEGER

小时计算为60分钟;每组60计算为1分钟

duration.seconds

的总数。

INTEGER

小时计算为3600;每分钟计算为60

duration.milliseconds

毫秒的总数

INTEGER

每组1000毫秒计算为1

duration.microseconds

微秒的总数。

INTEGER

毫秒计算为1000微秒

duration.nanoseconds

纳秒的总数。

INTEGER

微秒计算为1000纳秒

请注意

  • Cypher 在处理闰秒时使用UTC-SLS

  • 1并不总是包含24小时;在切换到/从夏令时时,可以有23个或25小时

  • 并不总是包含相同数量的

  • 由于闰年,并不总是包含相同数量的

还可以访问由组的第一阶组件限定的组件组的二阶组件

二阶DURATION组件
组件 组件组 描述 类型

duration.quartersOfYear

组中不构成完整季度数量。

INTEGER

duration.monthsOfYear

组中不构成完整数量。

INTEGER

duration.monthsOfQuarter

组中不构成完整季度数量。

INTEGER

duration.daysOfWeek

组中不构成完整数量。

INTEGER

duration.minutesOfHour

组中不构成完整小时分钟数量。

INTEGER

duration.secondsOfMinute

组中不构成完整分钟数量。

INTEGER

duration.millisecondsOfSecond

组中不构成完整毫秒数量。

INTEGER

duration.microsecondsOfSecond

组中不构成完整微秒数量。

INTEGER

duration.nanosecondsOfSecond

组中不构成完整纳秒数量

INTEGER

示例

以下是使用duration()函数解析持续时间的示例。有关更多信息,请参阅此处

示例 12. 返回一个持续时间为1416小时12分钟的持续时间
查询
RETURN duration('P14DT16H12M') AS theDuration
结果
theDuration

P14DT16H12M

行数:1

示例 13. 返回一个持续时间为5112小时的持续时间
查询
RETURN duration('P5M1.5D') AS theDuration
结果
theDuration

P5M1DT12H

行数:1

示例 14. 返回一个持续时间为45秒的持续时间
查询
RETURN duration('PT0.75M') AS theDuration
结果
theDuration

PT45S

行数:1

示例 15. 返回一个持续时间为2312小时的持续时间
查询
RETURN duration('P2.5W') AS theDuration
结果
theDuration

P17DT12H

行数:1

示例 16. 获取DURATION值的基于月份的组件
查询
WITH duration({years: 1, months: 5, days: 111, minutes: 42}) AS d
RETURN d.years, d.quarters, d.quartersOfYear, d.months, d.monthsOfYear, d.monthsOfQuarter
结果
d.years d.quarters d.quartersOfYear d.months d.monthsOfYear d.monthsOfQuarter

1

5

1

17

5

2

行数:1

d.quarters的值为5,因为持续时间的一年有四个季度,另外还有五个月中的另一个季度。d.months的值为17,因为它将持续时间一年的 12 个月加到五个月中。d.quartersOfYear是剩余的季度,计数到下一个完整的年份。类似地,d.monthsOfYeard.monthsOfQuarter分别计数到下一个完整年份和季度。请参阅持续时间的组件中的表一阶DURATION组件二阶DURATION组件

示例 17. 获取DURATION值的基于天的组件
查询
WITH duration({months: 5, days: 25, hours: 1}) AS d
RETURN d.weeks, d.days, d.daysOfWeek
结果
d.weeks d.days d.daysOfWeek

3

25

4

行数:1

d.weeks的值为 3,因为查询中的 25 天是三个完整的星期(或 21 天)。d.daysOfWeek是剩余的天数,计数到下一个完整的星期。请参阅持续时间的组件中的表一阶DURATION组件二阶DURATION组件

示例 18. 获取DURATION值的基于秒的一阶组件
查询
WITH duration({
  years: 1, months:1, days:1, hours: 1,
  minutes: 1, seconds: 1, nanoseconds: 111111111
}) AS d
RETURN d.hours, d.minutes, d.seconds, d.milliseconds, d.microseconds, d.nanoseconds
结果
d.hours d.minutes d.seconds d.milliseconds d.microseconds d.nanoseconds

1

61

3661

3661111

3661111111

3661111111111

行数:1

d.minutes是小时的 60 分钟和查询中的一分钟的总和,因为duration.hoursduration.minutes都是基于秒的组件。类似地,d.secondsd.millisecondsd.microsecondsd.nanoseconds是查询中相关基于秒的组件的总和值。

d.hours没有考虑查询中的天数,因为duration.days是一个基于天的组件。

请参阅持续时间的组件中的表一阶DURATION组件

示例 19. 获取DURATION值的基于秒的二阶组件
查询
WITH duration({
  years: 1, months:1, days:1,
  hours: 1, minutes: 1, seconds: 1, nanoseconds: 111111111
}) AS d
RETURN d.minutesOfHour, d.secondsOfMinute, d.millisecondsOfSecond, d.microsecondsOfSecond, d.nanosecondsOfSecond
结果
d.minutesOfHour d.secondsOfMinute d.millisecondsOfSecond d.microsecondsOfSecond d.nanosecondsOfSecond

1

1

111

111111

111111111

行数:1

返回的值都计数到下一个完整的小时、分钟或秒。例如,d.microsecondsOfSecond的值为111111,因为它是在微秒(四舍五入)中的查询中的111111111纳秒,但它不是另一个完整的秒。

请参阅持续时间的组件中的表二阶DURATION组件

示例 20. 创建一个表示 1.5 个的持续时间
查询
RETURN duration({days: 1, hours: 12}) AS theDuration
结果
theDuration

P1DT12H

行数:1

示例 21. 计算两个时间时刻之间的DURATION
查询
RETURN duration.between(date('1984-10-11'), date('2015-06-24')) AS theDuration
结果
theDuration

P30Y8M13D

行数:1

示例 22. 计算两个DATE值之间的天数
查询
RETURN duration.inDays(date('2014-10-11'), date('2015-08-06')) AS theDuration
结果
theDuration

P299D

行数:1

示例 23. 获取下个月最后一天的DATE
查询
RETURN date.truncate('month', date() + duration('P2M')) - duration('P1D') AS lastDay
结果
lastDay

2022-07-31

行数:1

示例 24. 将DURATION添加到DATE
查询
RETURN time('13:42:19') + duration({days: 1, hours: 12}) AS theTime
结果
theTime

01:42:19.000000000+00:00

行数:1

示例 25. 将两个DURATION值相加
查询
RETURN duration({days: 2, hours: 7}) + duration({months: 1, hours: 18}) AS theDuration
结果
theDuration

P1M2DT25H

行数:1

示例 26. 将DURATION乘以一个数字
查询
RETURN duration({hours: 5, minutes: 21}) * 14 AS theDuration
结果
theDuration

PT74H54M

行数:1

示例 27. 将DURATION除以一个数字
查询
RETURN duration({hours: 3, minutes: 16}) / 2 AS theDuration
结果
theDuration

PT1H38M

行数:1

示例 28. 检查两个时刻是否相差不到一天
查询
WITH
  datetime('2015-07-21T21:40:32.142+0100') AS date1,
  datetime('2015-07-21T17:12:56.333+0100') AS date2
RETURN
CASE
  WHEN date1 < date2 THEN date1 + duration("P1D") > date2
  ELSE date2 + duration("P1D") > date1
END AS lessThanOneDayApart
结果
lessThanOneDayApart

true

行数:1

示例 29. 返回当前月份的缩写名称
查询
RETURN ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][date().month-1] AS month
结果
month

"Jun"

行数:1

时间索引

所有时间类型都可以索引,因此支持对等式谓词的精确查找。时间时刻类型的索引还支持范围查找。


1. 这与公历一致;即公元/公元后的年份从公元 1 年开始,公元前/公元前的那一年(公元前 1 年)为 0,而公元前 2 年为 -1 等。
2. 任何一年的第一周是包含该年第一个星期四的星期,因此始终包含 1 月 4 日。
3. 对于 12 月 29 日起的日期,这可能是下一年,而对于 1 月 3 日前的日期,这可能是前一年,具体取决于第一周的开始方式。
4. Cypher 不支持闰秒;UTC-SLS(带平滑闰秒的 UTC)用于管理 UTC 和 TAI(国际原子时)之间的时间差。
5. 表达式 datetime().epochMillis 返回与 timestamp() 函数等效的值。
6. 对于纪元偏移量的纳秒部分,可以使用常规纳秒组件(instant.nanosecond)。