日期和时间转换

日期和时间可能以各种格式和配置出现,通常需要为数据存储系统、报告、网页等进行转换。APOC 日期函数允许用户对这些 Long 或 String 值进行操作,以满足不同类型的格式要求。

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

日期和时间格式注意事项

  • 默认格式为 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

函数

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

函数

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

函数

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

函数

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

函数

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

函数

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

函数

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

函数

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

函数

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

函数

apoc.date.add

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

签名

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

它接受以下参数

表 1. 配置
名称 类型 描述 可能的值

时间

INTEGER

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

单位

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. 配置
名称 类型 描述 可能的值

时间

INTEGER

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

单位

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. 配置
名称 类型 描述 可能的值

temporal

STRING

需要转换的日期字符串

currentFormat

STRING

输入日期字符串的格式

有关完整列表,请参阅 Java 文档(在“格式化和解析模式”下)

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. 配置
名称 类型 描述 可能的值

时间

INTEGER

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

单位

STRING

输入值的特异性

ms,s,m,h,d 或长格式 (millis,seconds,minutes,hours,days)

时区

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. 配置
名称 类型 描述 可能的值

日期

STRING

需要格式化的日期字符串

采用 ISO8601 标准格式的日期字符串

模式

STRING

输入日期字符串的格式

有关完整列表,请参阅 Java 文档(在“格式化和解析模式”下)

apoc.date.format

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

签名

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

它接受以下参数

表 6. 配置
名称 类型 描述 可能的值

时间

INTEGER

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

单位

STRING

输入值的特异性

ms,s,m,h,d 或长格式 (millis,seconds,minutes,hours,days)

格式

STRING

输出日期字符串的格式

可以手动使用 Java 格式指定,或作为内置格式指定

时区

STRING

结果日期字符串的时区

可以指定为 GMT 或数据库(文本)名称,如时区列表所示

apoc.date.fromISO8601

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

签名

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

它接受以下参数

表 7. 配置
名称 类型 描述 可能的值

时间

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. 配置
名称 类型 描述 可能的值

时间

STRING

需要格式化的日期字符串

采用 ISO8601 标准格式的日期字符串

单位

STRING

输出日期值所需的特异性

ms,s,m,h,d 或长格式 (millis,seconds,minutes,hours,days)

格式

STRING

要转换的日期字符串的格式

有关完整列表,请参阅 Java 文档(在“格式化和解析模式”下)

时区

STRING

结果日期字符串的时区

可以指定为 GMT 或数据库(文本)名称,如时区列表所示

apoc.date.systemTimezone

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

签名

apoc.date.systemTimezone() :: STRING

它不接受任何参数。

apoc.date.toISO8601

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

签名

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

它接受以下参数

表 9. 配置
名称 类型 描述 可能的值

时间

INTEGER

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

单位

STRING

输入值的特异性

ms,s,m,h,d 或长格式 (millis,seconds,minutes,hours,days)

apoc.date.toYears

apoc.date.toYears

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

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

签名

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

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

它接受以下参数进行每次转换
名称 类型 描述 可能的值

表 10. 配置 - 纪元到年份

INTEGER

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

注意:时间戳必须是 ms 格式!
名称 类型 描述 可能的值

表 10. 配置 - 纪元到年份

STRING

需要格式化的日期字符串

采用 ISO8601 标准格式的日期字符串

格式

STRING

要转换的日期字符串的格式

有关完整列表,请参阅 Java 文档(在“格式化和解析模式”下)