时间值
Cypher® 内置支持处理时间值,这些值可以作为属性存储在 Neo4j 数据库的节点和关系中。本节将讨论 Cypher 如何处理时区,并进一步详细探讨时间值。
|
时间值类型
下表列出了时间值类型及其支持的组件
| 类型 | 日期支持 | 时间支持 | 时区支持 |
|---|---|---|---|
|
|||
|
|||
|
|||
|
|||
|
|||
|
|
|
|
DATE(日期)、LOCAL TIME(本地时间)、ZONED TIME(带时区时间)、LOCAL DATETIME(本地日期时间)和 ZONED DATETIME(带时区日期时间)是时间即时 (temporal instant) 类型。时间即时值以不同的精度表示时间点。
相比之下,DURATION 不是时间即时类型。DURATION 表示一个时间量,捕获两个即时点之间的时间差,并且可以是负数。DURATION 捕获两个即时点之间的时间量,它不捕获开始时间和结束时间。
时区
时区表示为 UTC 的偏移量,或表示为命名时区的逻辑标识符(这些标识符基于 IANA 时区数据库)。无论哪种情况,时间在内部都存储为 UTC,时区偏移量仅在呈现时间时应用。这意味着时间即时点可以在不考虑时区的情况下进行排序。但是,如果两个时间在 UTC 下相同,则它们会按时区排序。
使用命名时区创建时间时,UTC 的偏移量是根据时区数据库中的规则计算得出的,以创建 UTC 时间即时点,并确保命名时区有效。
IANA 时区数据库中的时区规则可能会发生变化。例如,特定区域的夏令时规则可能会发生改变。如果这种情况发生在创建时间即时点之后,则就本地时区而言,显示的时间可能与最初输入的时间不同。但是,UTC 的绝对时间保持不变。
在 Cypher 中指定时区有三种方法
-
指定 UTC 的小时和分钟偏移量 (ISO 8601)。
-
指定命名时区。
-
同时指定偏移量和时区名称(要求两者匹配)。
有关示例,请参见 指定时区。
命名时区形式使用 IANA 时区数据库的规则来管理夏令时 (DST)。
数据库的默认时区可以使用配置选项 db.temporal.timezone 进行配置。此配置选项会影响以下函数的时间类型的创建
-
获取当前日期和时间而不指定时区。
-
从组件创建时间类型而不指定时区。
-
通过解析
STRING创建时间类型而不指定时区。 -
通过组合或选择没有时区组件的值来创建时间类型,且不指定时区。
-
截断没有时区组件的时间值,且不指定时区。
时间即时点
指定时间即时点
时间即时点由三部分组成:date(日期)、time(时间)和 timezone(时区)。这些部分可以组合生成各种时间值类型。字符 T 是字面字符。
| 时间即时类型 | 组件构成 |
|---|---|
|
|
|
|
|
|
|
|
|
|
*当组合 date 和 time 时,date 必须完整;即完全确定特定的某一天。
指定日期
| Component (组件) | 格式 | 描述 |
|---|---|---|
年 |
|
至少使用四位数字指定(在某些情况下适用特殊规则)。 |
月 |
|
使用从 |
周 |
|
始终以 |
季度 |
|
始终以 |
月中的第几天 |
|
使用从 |
周中的第几天 |
|
使用从 |
季度中的第几天 |
|
使用从 |
年中的序数日 |
|
使用从 |
如果年份在 0000 之前或 9999 之后,则适用以下附加规则
-
任何
0000之前的年份必须以减号-为前缀(例如-3000-01-01)。 -
任何
9999之后的年份必须以加号+为前缀(例如+11000-01-01)。 -
年份必须使用
-与下一个组件分隔-
如果下一个组件是月份(例如
+11000-01)。 -
如果下一个组件是年中的第几天(例如
+11000-123)。
-
如果年份组件以 - 或 + 为前缀,并与下一个组件分隔,则 Year 最多允许包含九位数字。因此,允许的年份范围在 -999,999,999 和 +999,999,999 之间。对于所有其他情况,即年份在 0000 和 9999 之间(含),Year 必须恰好包含四位数字(年份组件被解释为公元纪年)。
指定日期支持以下格式
| 格式 | 描述 | 示例 | 示例解释 |
|---|---|---|---|
|
日历日期: |
|
|
|
日历日期: |
|
|
|
日历日期: |
|
|
|
日历日期: |
|
|
|
周日期: |
|
|
|
周日期: |
|
|
|
周日期: |
|
|
|
周日期: |
|
|
|
季度日期: |
|
|
|
季度日期: |
|
|
|
季度日期: |
|
|
|
季度日期: |
|
|
|
序数日期: |
|
|
|
序数日期: |
|
|
|
年 |
|
|
可以省略最小的组件。Cypher 将假设省略的组件具有其可能的最小值。例如,2013-06 将被解释为与 2013-06-01 相同的日期。
指定时间
| Component (组件) | 格式 | 描述 |
|---|---|---|
|
|
使用从 |
|
|
使用从 |
|
|
使用从 |
|
|
使用从 |
Cypher 不支持闰秒;UTC-SLS(平滑闰秒的 UTC)用于管理 UTC 和 TAI(国际原子时)之间的时间差。
指定时间支持以下格式
| 格式 | 描述 | 示例 | 示例解释 |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
可以省略最小的组件。例如,时间可以使用 Hour 和 Minute 指定,省略 Second 和 fraction。另一方面,不能在省略 Minute 的情况下使用 Hour 和 Second 指定时间。
指定时区
时区按以下方式之一指定
-
作为相对于 UTC 的偏移量。
-
使用
Z缩写表示 UTC (±00:00) 时区。
当将时区指定为相对于 UTC 的偏移量时,适用以下规则
-
时区始终以加号 (
+) 或减号 (-) 开头。-
正偏移量,即以
+开头的时区,表示 UTC 以东的时区。 -
负偏移量,即以
-开头的时区,表示 UTC 以西的时区。
-
-
两位小时偏移量跟在
+/-符号后面。 -
可选的两位分钟偏移量跟在小时偏移量后面,可选地使用冒号 (
:) 分隔。 -
国际日期变更线的时区根据国家/地区表示为
+12:00或-12:00。
创建 ZONED DATETIME 时间即时类型的值时,也可以使用 IANA 时区数据库中的名称来指定命名时区。这可以作为偏移量的补充或替代。命名时区位于最后并用方括号 ([]) 括起来。如果同时提供了偏移量和命名时区,则偏移量必须与命名时区匹配。
指定时区支持以下格式
| 格式 | 描述 | 示例 | ZONED DATETIME 支持 |
ZONED TIME 支持 |
|---|---|---|---|---|
|
UTC |
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
时间即时点的组件
时间即时点值的组件可以作为属性访问。
| Component (组件) | 描述 | 类型 | 范围/格式 | DATE |
ZONED DATETIME |
LOCAL DATETIME |
ZONED TIME |
LOCAL TIME |
|---|---|---|---|---|---|---|---|---|
|
|
至少 4 位数字。有关详细信息,请参阅使用 |
||||||
|
季度组件。 |
|
|
|||||
|
月份组件。 |
|
|
|||||
|
周组件。[2] |
|
|
|||||
|
周组件所属的年份。[3] |
|
至少 4 位数字。有关详细信息,请参阅使用 |
|||||
|
季度中的第几天组件。 |
|
|
|||||
|
季度中的第几天组件( |
|
|
|||||
|
月中的第几天组件。 |
|
|
|||||
|
年中的第几天组件。 |
|
|
|||||
|
周中的第几天组件(一周的第一天是星期一)。 |
|
|
|||||
|
周中的第几天组件( |
|
|
|||||
|
小时组件。 |
|
|
|||||
|
分钟组件。 |
|
|
|||||
|
秒组件。[4] |
|
|
|||||
|
毫秒组件。 |
|
|
|||||
|
微秒组件。 |
|
|
|||||
|
纳秒组件。 |
|
|
|||||
|
时区组件。 |
|
根据时区的指定方式,这要么是时区名称,要么是格式为 |
|||||
|
时区偏移量。 |
|
格式为 |
|||||
|
以分钟为单位的时区偏移量。 |
|
|
|||||
|
以秒为单位的时区偏移量。 |
|
|
|||||
|
|
|
对于 |
|||||
|
|
|
对于 |
|||||
3. 对于 12 月 29 日起的日期,这可能是下一年;对于 1 月 3 日之前的日期,这可能是上一年,具体取决于第 1 周的开始方式。
4. Cypher 不支持闰秒;UTC-SLS(平滑闰秒的 UTC)用于管理 UTC 和 TAI(国际原子时)之间的时间差。
5. 表达式 datetime().epochMillis 返回与 timestamp() 函数等效的值。
6. 对于纪元偏移量的纳秒部分,可以使用常规的纳秒组件 (instant.nanosecond)。 | ||||||||
示例
要使用特定的时间即时点类型,必须使用其对应的函数。例如,要创建类型为 ZONED DATETIME 的属性值,必须使用 datetime() 函数。
有关具体示例,请参阅
DATE
要使用 DATE 值(包括创建、解析和提取组件),请使用 date() 函数。
DATEDATE 属性值CREATE (n:Label)
SET n.date = date("2025-02-18")
RETURN n.date AS date, valueType(n.date) AS temporalValueType
| date | temporalValueType |
|---|---|
|
|
行:1 |
|
DATE 属性值CREATE (n:Label)
SET n.date = date({year: 2025, month: 2, day: 18})
RETURN n.date AS date, valueType(n.date) AS temporalValueType
| date | temporalValueType |
|---|---|
|
|
行:1 |
|
DATERETURN date('+2015-W13-4') AS theDate
| theDate |
|---|
|
行:1 |
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 |
|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
行:1 |
||||||||
LOCAL TIME
要使用 LOCAL TIME 值(包括创建、解析和提取组件),请使用 localtime() 函数。
LOCAL TIMELOCAL TIME 属性值CREATE (n:Label)
SET n.localTime = localtime("12:34:56.789")
RETURN n.localTime AS localTime, valueType(n.localTime) AS temporalValueType
| localTime | temporalValueType |
|---|---|
|
|
行:1 |
|
LOCAL TIME 属性值CREATE (n:Label)
SET n.localTime = localtime({hour: 12, minute: 34, second: 56, millisecond: 789})
RETURN n.localTime AS localTime, valueType(n.localTime) AS temporalValueType
| localTime | temporalValueType |
|---|---|
|
|
行:1 |
|
LOCAL TIME 值的组件WITH localtime({hour: 12, minute: 34, second: 56, millisecond: 789}) AS t
RETURN t.hour, t.minute, t.second, t.millisecond
| t.hour | t.minute | t.second | t.millisecond |
|---|---|---|---|
|
|
|
|
行:1 |
|||
ZONED TIME
要使用 ZONED TIME 值(包括创建、解析和提取组件),请使用 time() 函数。
ZONED TIMEZONED TIME 属性值CREATE (n:Label)
SET n.zonedTime = time("12:34:56.789+02:00")
RETURN n.zonedTime AS zonedTime, valueType(n.zonedTime) AS temporalValueType
| zonedTime | temporalValueType |
|---|---|
|
|
行:1 |
|
ZONED TIME 属性值CREATE (n:Label)
SET n.zonedTime = time({hour: 12, minute: 34, second: 56, millisecond: 789, timezone: 'Europe/Stockholm'})
RETURN n.zonedTime AS zonedTime, valueType(n.zonedTime) AS temporalValueType
| time | temporalValueType |
|---|---|
|
|
行:1 |
|
ZONED TIME 值的组件WITH time("12:34:56.789+02:00") AS t
RETURN t.hour, t.minute, t.second, t.millisecond, t.offset
| t.hour | t.minute | t.second | t.millisecond | t.offset |
|---|---|---|---|---|
|
|
|
|
|
行:1 |
||||
LOCAL DATETIME
要使用 LOCAL DATETIME 值(包括创建、解析和提取组件),请使用 localdatetime() 函数。
LOCAL DATETIMELOCAL DATETIME 属性值CREATE (n:Label)
SET n.localDateTime = localdatetime("2025-02-18T12:34:56")
RETURN n.localDateTime AS localDateTime, valueType(n.localDateTime) AS temporalValueType
| localDateTime | temporalValueType |
|---|---|
|
|
行:1 |
|
LOCAL DATETIME 属性值CREATE (n:Label)
SET n.localDateTime = localdatetime({year: 2025, month: 2, day: 18, hour: 12, minute: 34, second: 56, millisecond: 789})
RETURN n.localDateTime AS localDateTime, valueType(n.localDateTime) AS temporalValueType
| localDatetime | temporalValueType |
|---|---|
|
|
行:1 |
|
LOCAL DATETIMERETURN localdatetime('2015185T19:32:24') AS theLocalDateTime
| theLocalDateTime |
|---|
|
行:1 |
LOCAL DATETIME 值的组件WITH localdatetime({year: 2025, month: 2, day: 19, hour: 12, minute: 34, second: 56, millisecond: 789}) AS t
RETURN t.year, t.month, t.day, t.hour, t.minute, t.second, t.millisecond
| t.year | t.month | t.day | t.hour | t.minute | t.second | t.millisecond |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
行:1 |
||||||
ZONED DATETIME
要使用 ZONED DATETIME 值(包括创建、解析和提取组件),请使用 datetime() 函数。
ZONED DATETIMEZONED DATETIME 属性值CREATE (n:Label)
SET n.zonedDateTime = datetime("2025-02-18T12:34:56.789+02:00")
RETURN n.zonedDateTime AS zonedDateTime, valueType(n.zonedDateTime) AS temporalValueType
| zonedDateTime | temporalValueType |
|---|---|
|
|
行:1 |
|
ZONED DATETIME 属性值CREATE (n:Label)
SET n.zonedDateTime = datetime({year: 2025, month: 2, day: 18, hour: 12, minute: 34, second: 56, millisecond: 789, timezone: 'Europe/Stockholm'})
RETURN n.zonedDateTime, valueType(n.zonedDateTime) AS temporalValueType
| zonedDateTime | temporalValueType |
|---|---|
|
|
行:1 |
|
ZONED DATETIME 属性值CREATE (n:Label)
SET n.zonedDateTime = datetime({timezone: 'Europe/Stockholm'})
RETURN n.zonedDateTime AS zonedDateTime, valueType(n.zonedDateTime) AS temporalValueType
| zonedDateTime | temporalValueType |
|---|---|
|
|
行:1 |
|
ZONED DATETIMERETURN datetime('2015-06-24T12:50:35.556+0100') AS theDateTime
| theDateTime |
|---|
|
行:1 |
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 |
|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
行:1 |
||||||||
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 |
|---|---|---|---|---|---|
|
|
|
|
|
|
行:1 |
|||||
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.timezone, d.offset, d.offsetMinutes, d.epochSeconds, d.epochMillis
| d.timezone | d.offset | d.offsetMinutes | d.epochSeconds | d.epochMillis |
|---|---|---|---|---|
|
|
|
|
|
行:1 |
||||
截断时间值
Neo4j 中的 truncate 函数允许您通过将时间值截断到指定的组件(例如 year、month 或 second)来降低其精度。
DATE 值要截断 DATE 值,请使用 date.truncate() 函数。
RETURN date.truncate('year') AS firstDay
| firstDay |
|---|
|
行:1 |
RETURN date.truncate('week', date('2019-10-01'), {dayOfWeek: 4}) AS thursday
| thursday |
|---|
|
行:1 |
LOCAL TIME 值要截断 LOCAL TIME 值,请使用 localtime.truncate() 函数。
LOCAL TIME 值的当前分钟开始时间RETURN localtime.truncate('minute', localtime("12:34:56.789")) AS truncatedMinute
| truncatedMinute |
|---|
|
行:1 |
LOCAL TIME 获取当前秒的开始时间RETURN localtime.truncate('second') AS currentSecond
| currentSecond |
|---|
|
行:1 |
ZONED TIME 值要截断 ZONED TIME 值,请使用 time.truncate() 函数。
ZONED TIME 值的当前分钟开始时间RETURN time.truncate('minute', time("12:34:56.789+02:00")) AS truncatedMinute
| truncatedMinute |
|---|
|
行:1 |
ZONED TIMERETURN time.truncate('minute', time()) AS currentTime
| truncatedTime |
|---|
|
行:1 |
LOCAL DATETIME 值要截断 LOCAL DATETIME 值,请使用 localdatetime.truncate() 函数。
LOCAL DATETIME 的小时开始时间RETURN localdatetime.truncate('hour', localdatetime("2025-02-18T12:34:56.789")) AS truncatedHour
| truncatedHour |
|---|
|
行:1 |
LOCAL DATETIME 中当前月份的开始时间RETURN localdatetime.truncate('month') AS truncatedMonth
| truncatedMonth |
|---|
|
行:1 |
ZONED DATETIME 值要截断 ZONED DATETIME 值,请使用 datetime.truncate() 函数。
ZONED DATETIME 的分钟开始时间RETURN datetime.truncate('minute', datetime("2025-02-18T12:34:56.789+02:00")) AS truncatedZonedDateTime
| truncatedZonedDateTime |
|---|
|
行:1 |
ZONED DATETIME 中当前周的星期三开始时间RETURN datetime.truncate('week', datetime(), {dayOfWeek: 3}) AS startOfWednesday
| startOfWednesday |
|---|
|
行:1 |
持续时间 (Durations)
指定持续时间
DURATION 表示一个时间量,捕获两个即时点之间的时间差,并且可以是负数。
DURATION 的指定以 P 为前缀,可以使用基于单位的形式或基于日期和时间的形式
-
基于单位的形式:
P[nY][nM][nW][nD][T[nH][nM][nS]]-
方括号 (
[]) 表示可选组件(值可为零的组件可以省略)。 -
n表示在 64 位整数范围内的数值。 -
最后一个(也是最小的)组件的值可以包含十进制分数。
-
每个组件必须带有表示单位的组件标识符作为后缀。
-
基于单位的形式使用
M作为月份和分钟的后缀。因此,时间部分必须始终以T为前缀,即使日期部分没有提供组件也是如此。 -
持续时间的最大总长度受 64 位整数可以容纳的秒数限制。
-
-
基于日期和时间的形式:
P<date>T<time>。-
与基于单位的形式不同,此形式要求每个组件都在有效的
LOCAL DATETIME范围内。
-
下表列出了基于单位形式的组件标识符
| 组件标识符 | 描述 | 注释 |
|---|---|---|
|
年 |
|
|
月 |
必须在 |
|
周 |
|
|
天 |
|
|
小时 |
|
|
分钟 |
必须在 |
|
秒 |
持续时间的组件
DURATION 可以有多个组件,每个组件归类为月、天和秒组。
DURATION 值的组件在其组件组内截断如下
| 组件组 | Component (组件) | 描述 | 类型 | 详细信息 |
|---|---|---|---|---|
月 |
|
年的总数。 |
|
每组 |
|
季度的总数。 |
|
每 年 算作 |
|
|
月的总数。 |
|
每 年 算作 |
|
天 |
|
周的总数。 |
|
每组 |
|
天的总数。 |
|
每 周 算作 |
|
秒 |
|
小时的总数。 |
|
每组 |
|
分钟的总数。 |
|
每 小时 算作 |
|
|
秒的总数。 |
|
每 小时 算作 |
|
|
毫秒的总数。 |
|
每组 |
|
|
微秒的总数。 |
|
每 毫秒 算作 |
|
|
纳秒的总数。 |
|
每 微秒 算作 |
|
请注意
|
还可以访问受该组一阶组件限制的组件组的二阶组件
| Component (组件) | 组件组 | 描述 | 类型 |
|---|---|---|---|
|
月 |
组中不足一整年的季度数。 |
|
|
月 |
组中不足一整年的月份数。 |
|
|
月 |
组中不足一整季度的月份数。 |
|
|
天 |
组中不足一整周的天数。 |
|
|
秒 |
组中不足一整小时的分钟数。 |
|
|
秒 |
组中不足一整分钟的秒数。 |
|
|
秒 |
组中不足一整秒的毫秒数。 |
|
|
秒 |
组中不足一整秒的微秒数。 |
|
|
秒 |
组中不足一整秒的纳秒数 |
|
示例
以下是使用 duration() 函数解析持续时间的示例。更多信息可以在 此处 找到。
14 天、16 小时和 12 分钟的持续时间RETURN duration('P14DT16H12M') AS theDuration
| theDuration |
|---|
|
行:1 |
5 月、1 天和 12 小时的持续时间RETURN duration('P5M1.5D') AS theDuration
| theDuration |
|---|
|
行:1 |
45 秒的持续时间RETURN duration('PT0.75M') AS theDuration
| theDuration |
|---|
|
行:1 |
2 周、3 天和 12 小时的持续时间RETURN duration('P2.5W') AS theDuration
| theDuration |
|---|
|
行:1 |
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 |
|||||
d.quarters 的值为 5,因为该持续时间的一年有四个季度,而五个月中还有一个季度。 d.months 的值为 17,因为它将持续时间一年的 12 个月与 5 个月相加。 d.quartersOfYear 是剩余的季度,计入下一个完整年度。类似地,d.monthsOfYear 和 d.monthsOfQuarter 分别计入下一个完整年度和季度。请参阅 持续时间的组件 中的一阶 DURATION 组件和二阶 DURATION 组件表格。
DURATION 值的日相关组件WITH duration({months: 5, days: 25, hours: 1}) AS d
RETURN d.weeks, d.days, d.daysOfWeek
| d.weeks | d.days | d.daysOfWeek |
|---|---|---|
|
|
|
行:1 |
||
d.weeks 的值为 3,因为查询中的 25 天是三个整周(或 21 天)。 d.daysOfWeek 是剩余的天数,计入下一个完整周。请参阅 持续时间的组件 中的一阶 DURATION 组件和二阶 DURATION 组件表格。
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 |
|||||
d.minutes 是小时的 60 分钟与查询中 1 分钟的总和,因为 duration.hours 和 duration.minutes 都是基于秒的组件。类似地,d.seconds、d.milliseconds、d.microseconds 和 d.nanoseconds 是查询中相关基于秒的组件的总和值。
d.hours 不考虑查询中的天数,因为 duration.days 是基于天的组件。
请参阅 持续时间的组件 中的一阶 DURATION 组件表格。
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 |
||||
返回的值分别计入下一个完整小时、分钟或秒。例如,d.microsecondsOfSecond 的值为 111111,因为它是查询中的 111111111 纳秒以微秒计(向下取整),但不足一整秒。
请参阅 持续时间的组件 中的二阶 DURATION 组件表格。
RETURN duration({days: 1, hours: 12}) AS theDuration
| theDuration |
|---|
|
行:1 |
DURATIONRETURN duration.between(date('1984-10-11'), date('2015-06-24')) AS theDuration
| theDuration |
|---|
|
行:1 |
DATE 值之间的天数RETURN duration.inDays(date('2014-10-11'), date('2015-08-06')) AS theDuration
| theDuration |
|---|
|
行:1 |
DATERETURN date.truncate('month', date() + duration('P2M')) - duration('P1D') AS lastDay
| lastDay |
|---|
|
行:1 |
DURATION 添加到 DATERETURN time('13:42:19') + duration({days: 1, hours: 12}) AS theTime
| theTime |
|---|
|
行:1 |
DURATION 值RETURN duration({days: 2, hours: 7}) + duration({months: 1, hours: 18}) AS theDuration
| theDuration |
|---|
|
行:1 |
DURATION 乘以一个数字RETURN duration({hours: 5, minutes: 21}) * 14 AS theDuration
| theDuration |
|---|
|
行:1 |
DURATION 除以一个数字RETURN duration({hours: 3, minutes: 16}) / 2 AS theDuration
| theDuration |
|---|
|
行:1 |
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 |
|---|
|
行:1 |
RETURN ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"][date().month-1] AS month
| month |
|---|
|
行:1 |
格式化时间值
使用 Cypher 的 format(),您可以创建时间即时点和持续时间类型的动态格式化字符串表示。
WITH datetime('1986-11-18T6:04:45.123456789+01:00[Europe/Berlin]') AS dt
RETURN format(dt, "MM/dd/yyyy") AS US, format(dt, "dd/MM/yyyy") AS EU
| US | EU |
|---|---|
|
|
行:1 |
|
WITH duration({years: 1, months: 4, weeks: 3, days: 4, hours: 5, minutes: 6, seconds: 7, milliseconds: 8, microseconds: 9, nanoseconds: 10}) AS d
RETURN format(d, "y 'years' q 'quarters' M 'months' w 'weeks' d 'days' h 'hours' m 'minutes' s 'seconds' N 'nanos'") AS x
| x |
|---|
|
行:1 |