日期和时间转换

日期和时间以多种格式和配置出现,通常需要针对数据存储系统、报表、网页等进行转换。APOC 日期函数允许用户获取这些 Long 或 String 类型的值,并根据不同的格式需求进行操作。

如果您需要将日期对象类型转换为其他格式,请参阅 时间函数 (Temporal Functions)

关于日期和时间格式的说明

  • 默认格式为 yyyy-MM-dd HH:mm:ss

  • 如果格式模式中未指定时区,格式化程序将默认日期属于 UTC 时区

  • 如果指定了时区模式,则会从日期字符串中提取时区,否则将报错

  • to/fromSeconds 时间戳值基于 POSIX(Unix 时间)系统,即时间戳表示自 1970 年 1 月 1 日星期四 00:00:00 UTC 以来经过的秒数

  • 完整支持的格式列表请参见 SimpleDateFormat JavaDoc

过程概览

下表描述了可用的过程:

限定名称 类型

apoc.date.add
apoc.date.add(time INTEGER, unit STRING, addValue INTEGER, addUnit STRING) - 将指定时间单位的值添加到给定的时间戳中。

函数

apoc.date.convert
apoc.date.convert(time INTEGER, unit STRING, toUnit STRING) - 将给定的时间戳从一个时间单位转换为不同时间单位的时间戳。

函数

apoc.date.convertFormat
apoc.date.convertFormat(temporal STRING, currentFormat STRING, convertTo STRING) - 将一种类型的日期格式 STRING 转换为另一种类型的日期格式 STRING

函数 (Function) Cypher 25 中已弃用

apoc.date.currentTimestamp
apoc.date.currentTimestamp() - 返回当前的 Unix 纪元时间戳(毫秒)。

函数 (Function) Cypher 25 中已弃用

apoc.date.field
apoc.date.field(time INTEGER, unit STRING, timezone STRING) - 从给定的日期时间返回一个字段的值。

函数 (Function) Cypher 25 中已弃用

apoc.date.fields
apoc.date.fields(date STRING, pattern STRING) - 将给定的日期拆分为字段,并返回一个包含每个字段值的 MAP

函数 (Function) Cypher 25 中已弃用

apoc.date.format
apoc.date.format(time INTEGER, unit STRING, format STRING, timezone STRING) - 返回时间值的 STRING 表示。时间单位(默认:毫秒)、日期格式(默认:ISO)和时区(默认:当前时区)都可以更改。

函数 (Function) Cypher 25 中已弃用

apoc.date.fromISO8601
apoc.date.fromISO8601(time STRING) - 将给定的日期 STRING (ISO8601) 转换为表示时间值的 INTEGER(毫秒)。

函数 (Function) Cypher 25 中已弃用

apoc.date.parse
apoc.date.parse(time STRING, unit STRING, format STRING, timezone STRING) - 将给定的日期 STRING 从指定格式解析为指定的时间单位。

函数 (Function) Cypher 25 中已弃用

apoc.date.systemTimezone
apoc.date.systemTimezone() - 返回系统时区的显示名称(例如 Europe/London)。

函数

apoc.date.toISO8601
apoc.date.toISO8601(time INTEGER, unit STRING) - 返回 ISO8601 格式的指定时间值的 STRING 表示。

函数 (Function) Cypher 25 中已弃用

apoc.date.toYears
apoc.date.toYears(value ANY, format STRING) - 将给定的时间戳或日期转换为表示年份的 FLOAT

函数

apoc.date.add

此函数可以对纪元(epoch)格式的日期添加或减去时间单位值。

签名

apoc.date.add(time :: INTEGER, unit :: STRING, addValue :: INTEGER, addUnit :: STRING) :: INTEGER

它接受以下参数

表 1. 配置
名称 (name) type description(描述) 潜在值

time

INTEGER(整数)

要操作的日期值(纪元整数格式)

unit

STRING

输入值的精度

ms,s,m,h,d 或完整形式(millis,seconds,minutes,hours,days

addValue

INTEGER(整数)

要添加或减去的时间数值

addUnit

STRING

要添加或减去的单位类型

ms,s,m,h,d 或完整形式

apoc.date.convert

此函数将一种时间单位的日期值转换为另一种时间单位的日期值。

签名

apoc.date.convert(time :: INTEGER, unit :: STRING, toUnit :: STRING) :: INTEGER

它接受以下参数

表 2. 配置
名称 (name) type description(描述) 潜在值

time

INTEGER(整数)

要操作的日期值(纪元整数格式)

unit

STRING

输入值的精度

ms,s,m,h,d 或完整形式(millis,seconds,minutes,hours,days

toUnit

STRING

输出值的单位类型

ms,s,m,h,d 或完整形式

apoc.date.convertFormat

此函数将一种格式的日期字符串转换为另一种格式的日期字符串。

签名

apoc.date.convertFormat(temporal :: STRING, currentFormat :: STRING, convertTo = yyyy-MM-dd :: STRING) :: STRING

它接受以下参数

表 3. 配置
名称 (name) type description(描述) 潜在值

temporal

STRING

需要转换的日期字符串

currentFormat

STRING

输入日期字符串的格式

有关完整列表,请参见 Java 文档中的 Patterns for Formatting and Parsing(格式化和解析模式)部分

convertTo

STRING

输出时间类型的格式

可以使用 Java 格式手动指定,也可以使用 内置格式

apoc.date.currentTimestamp

此函数返回调用时系统的当前时间戳。它提供 System.currentTimeMillis(),在事务执行期间保持当前时间,这与 Cypher 的 timestamp() 函数不同,后者在事务内不会更新。

签名

apoc.date.currentTimestamp() :: INTEGER

它不接受任何参数。

apoc.date.field

此函数从纪元格式的日期中提取一个字段的值。

签名

apoc.date.field(time :: INTEGER, unit = d :: STRING, timezone = UTC :: STRING) :: INTEGER

Neo4j 3.4 引入了时间数据类型,这是在 Neo4j 中表示日期的推荐方式。时间类型的字段可以使用 Cypher 的 instance.field 函数获取。(例如 datetime({epochMillis: dateInteger}).year)有关语法的更多详细信息,请参阅 Cypher 文档

但是,如果您仍然需要转换时间戳格式,此过程提供了该功能。

它接受以下参数

表 4. 配置
名称 (name) type description(描述) 潜在值

time

INTEGER(整数)

要操作的日期值(纪元整数格式)

unit

STRING

输入值的精度

ms,s,m,h,d 或完整形式(millis,seconds,minutes,hours,days

timezone

STRING

结果日期字符串的时区

可以使用 GMT 或数据库(文本)名称指定,具体列表参考 时区列表

apoc.date.fields

此函数从纪元格式的日期中提取所有字段的值,并以列和映射的形式返回。

签名

apoc.date.fields(date :: STRING, pattern = yyyy-MM-dd HH:mm:ss :: STRING) :: MAP

在 3.4 版本中,Neo4j 引入了时间数据类型,这是在 Neo4j 中表示日期的推荐方式。时间类型的字段可以使用 Cypher 的 instance.field 函数获取。(例如 datetime({epochMillis: dateInteger}).year)有关语法的更多详细信息,请参阅 Cypher 文档

但是,如果您仍然需要转换时间戳格式,此过程提供了该功能。

它接受以下参数

表 5. 配置
名称 (name) type description(描述) 潜在值

date

STRING

需要格式化的日期字符串

ISO8601 标准格式的日期字符串

pattern

STRING

输入日期字符串的格式

有关完整列表,请参见 Java 文档中的 Patterns for Formatting and Parsing(格式化和解析模式)部分

apoc.date.format

此函数将纪元格式的日期转换为指定格式的日期字符串。

签名

apoc.date.format(time :: INTEGER, unit = ms :: STRING, format = yyyy-MM-dd HH:mm:ss :: STRING, timezone = :: STRING) :: STRING

它接受以下参数

表 6. 配置
名称 (name) type description(描述) 潜在值

time

INTEGER(整数)

要操作的日期值(纪元整数格式)

unit

STRING

输入值的精度

ms,s,m,h,d 或完整形式(millis,seconds,minutes,hours,days

format

STRING

输出日期字符串的格式

可以使用 Java 格式手动指定,也可以使用 内置格式

timezone

STRING

结果日期字符串的时区

可以使用 GMT 或数据库(文本)名称指定,具体列表参考 时区列表

apoc.date.fromISO8601

此函数将 ISO8601 标准格式的日期字符串转换为纪元格式的日期。

签名

apoc.date.fromISO8601(time :: STRING) :: INTEGER

它接受以下参数

表 7. 配置
名称 (name) type description(描述) 潜在值

time

STRING

需要格式化的日期字符串

ISO8601 标准格式的日期字符串

日期字符串时区仅期望 GMT+00:00 格式的 Z 作为时区标识符。此过程不支持其他时区规范。

apoc.date.parse

此函数解析指定格式的日期字符串,并将其转换为指定时间单位的纪元格式日期。

签名

apoc.date.parse(time :: STRING, unit = ms :: STRING, format = yyyy-MM-dd HH:mm:ss :: STRING, timezone = :: STRING) :: INTEGER

它接受以下参数

表 8. 配置
名称 (name) type description(描述) 潜在值

time

STRING

需要格式化的日期字符串

ISO8601 标准格式的日期字符串

unit

STRING

输出日期值所需的精度

ms,s,m,h,d 或完整形式(millis,seconds,minutes,hours,days

format

STRING

待转换的日期字符串格式

有关完整列表,请参见 Java 文档中的 Patterns for Formatting and Parsing(格式化和解析模式)部分

timezone

STRING

结果日期字符串的时区

可以使用 GMT 或数据库(文本)名称指定,具体列表参考 时区列表

apoc.date.systemTimezone

此函数返回系统的时区显示名称。

签名

apoc.date.systemTimezone() :: STRING

它不接受任何参数。

apoc.date.toISO8601

此函数将纪元格式的日期转换为 ISO8601 标准格式的日期字符串。

签名

apoc.date.toISO8601(time :: INTEGER, unit = ms :: STRING) :: STRING

它接受以下参数

表 9. 配置
名称 (name) type description(描述) 潜在值

time

INTEGER(整数)

要操作的日期值(纪元整数格式)

unit

STRING

输入值的精度

ms,s,m,h,d 或完整形式(millis,seconds,minutes,hours,days

apoc.date.toYears

此函数可以进行几种不同的转换。

  1. 将纪元毫秒格式的日期转换为自 Unix 纪元时间 1970 年 1 月 1 日 以来经过的年数。

  2. 将指定格式的日期字符串转换为自 0 年以来经过的年数。

签名

apoc.date.toYears(value :: ANY, format = yyyy-MM-dd HH:mm:ss :: STRING) :: FLOAT

它为每种转换接受以下参数

表 10. 配置 - 纪元转年数
名称 (name) type description(描述) 潜在值

INTEGER(整数)

要操作的日期值(纪元毫秒整数格式)

注意:时间戳必须采用 ms 格式!

表 11. 配置 - 字符串日期转年数
名称 (name) type description(描述) 潜在值

STRING

需要格式化的日期字符串

ISO8601 标准格式的日期字符串

format

STRING

待转换的日期字符串格式

有关完整列表,请参见 Java 文档中的 Patterns for Formatting and Parsing(格式化和解析模式)部分