彻底搞懂时间格式:Date & Time 节点实现 UTC 转北京时间与格式转换

2026-01-24 12 0

别再被时间格式搞晕了:UTC 转北京时间其实很简单

笔者在 N8N大学 接到过无数个咨询,其中高频出现的一个问题就是:“我的数据里是 UTC 时间,怎么转成中国标准时间(CST)?” 这种问题通常出现在对接海外 API、处理数据库日志或者跨国协同办公的场景中。

如果你还在用 Excel 或者写 Python 脚本来处理时间转换,那真的太原始了。在 n8n 的世界里,这本该是一个 Date & Time 节点就能解决的丝滑操作。但因为时区、格式化字符串的坑,很多人在这里翻了车。今天,笔者就带你彻底搞定 n8n 中的时间处理,从 UTC 到北京时间,一步到位。

核心痛点:为什么时间转换总是报错?

在 n8n 中,时间处理的核心逻辑其实非常简单,但容易混淆的点在于:输入是什么格式,你要输出什么格式,以及中间如何转译时区。

很多新手遇到的典型场景是:上游节点(比如 HTTP Request)拉回来的 JSON 数据里,时间戳是 2023-10-27T08:00:00Z(这就是 UTC 标准格式,Z 代表 UTC)。而你的业务系统或者飞书/钉钉机器人,需要的是 2023-10-27 16:00:00 这种格式。

这里有两个核心变量:

  1. 时区(Timezone): n8n 默认运行在服务器的时区(通常是 UTC),如果你不显式指定,它就会按 UTC 算,导致你得到的时间总是比预期慢 8 小时。
  2. 格式(Format): 年月日时分秒的排列组合,差一个符号都会导致后续节点解析失败。

实战操作:三步搞定 UTC 转北京时间

下面笔者带大家走一遍标准流程。假设我们有一个输入数据,字段名为 utc_time,值为 2023-10-27T08:00:00Z。我们的目标是生成一个北京时间的可读字符串。

第一步:准备数据 (Set Node)

为了演示,我们先用一个 Set 节点模拟数据源。在 Fields 中添加一个字段:

  • Name: utc_time
  • Value: 2023-10-27T08:00:00Z

这一步是为了确保你明白我们要处理的数据长什么样。

第二步:时区转换 (Date & Time Node)

这是最关键的一步。拖拽一个 Date & Time 节点进来,我们需要配置两个地方:

  1. Mode (模式): 选择 Convert Timezone(转换时区)。
  2. Source Time String (源时间字符串): 填入 {{ $json.utc_time }}。这里 n8n 会自动识别 UTC 格式。
  3. Source Timezone (源时区): 默认即可,或者显式选 UTC。因为我们的数据带 Z
  4. Target Timezone (目标时区): 这是重点! 请搜索并选择 Asia/Shanghai。不要选错成 Asia/Chongqing 或其他,虽然它们时间一样,但规范选 Shanghai
  5. Output Format (输出格式): 这里你可以自定义,比如 yyyy-MM-dd HH:mm:ss。如果你想保留原始 ISO 格式但只是变了时区,可以留空或选默认。

做完这一步,你得到的数据已经是北京时间了,只是可能格式还不是你想要的。

第三步:格式化输出 (Date & Time Node)

如果你对上一步输出的格式不满意(比如想加个星期几,或者改成中文格式),可以再串联一个 Date & Time 节点,或者直接在上一个节点里配置 Output Format

通常推荐在第二步直接配置好 Output Format,例如填入:

yyyy-MM-dd HH:mm:ss

这样输出就是完美的 2023-10-27 16:00:00

如果你需要更花哨的格式,比如 2023年10月27日 16:00:00 星期五,你需要用到以下占位符:

  • yyyy = 年
  • MM = 月
  • dd = 日
  • HH = 24小时制小时
  • mm = 分
  • ss = 秒
  • EEEE = 星期几(中文需要配合 i18n 设置,通常在前端处理,后端建议输出标准格式)

硬核避坑指南:笔者的血泪经验

在 N8N大学 的社区里,关于时间节点的报错通常集中在以下两点,请务必注意:

1. “时间戳”与“时间字符串”的混淆

很多 API 返回的是 Unix 时间戳(比如 1698384000000,13位毫秒级)。如果你直接把这串数字丢进 Date & Time 节点的 Source Time String,n8n 会报错或者解析成 1970 年。

解决方案: 如果是时间戳,Mode 要选 Format a Timestamp,而不是 Convert Timezone。或者,你先用 JavaScript 节点把时间戳转成 ISO 字符串,再给 Date & Time 处理。

2. 时区字符串的拼写错误

n8n 的时区选择器是下拉菜单,但如果你是手动输入字符串,必须严格遵守 IANA 格式。比如输入 BeijingChina 是无效的,必须是 Asia/Shanghai

笔者建议: 永远使用下拉菜单选择,不要手写,除非你对 IANA 时区数据库非常熟悉。

3. 夏令时(DST)的陷阱

虽然中国不实行夏令时,但如果你处理的是美国或欧洲的时间,务必注意 America/New_York 在夏天和冬天的偏移量是不同的。n8n 的 Date & Time 节点会自动处理这个问题,前提是你的 Source Timezone 填对了。如果你填的是固定的 UTC-5,在夏令时期间就会出错。所以,永远优先选地区名(如 America/New_York),而不是固定偏移量。

FAQ 问答

Q1: 我的 n8n 面板语言是中文,为什么 Date & Time 节点生成的日期还是英文?

A: n8n 节点的输出格式主要依赖于你填写的 Format String(格式字符串)和底层的 JavaScript 库。如果你想要中文的“2023年10月27日”,你需要在格式字符串里手动填入“年”、“月”、“日”这些汉字字符。n8n 本身不会自动根据界面语言去翻译日期输出,这需要你在配置时自定义。

Q2: 为什么我转换后的时间还是比实际少 8 小时?

A: 这通常是因为你只改了格式,没改时区。检查一下你的 Date & Time 节点 Mode 是否选对了。如果你是从 UTC 转上海,Mode 必须是 Convert Timezone,并且 Target Timezone 显式选了 Asia/Shanghai。如果 Mode 是 Format a Date String,它只负责换皮,不负责挪时区。

Q3: 这个节点免费版能用吗?

A: 完全可以。Date & Time 是 n8n 的核心内置节点,无论你是 Cloud 版、免费的 Self-hosted 版,还是付费的企业版,这个节点都是开箱即用的,没有任何功能限制。

总结与资源

搞定时间格式,本质上就是搞懂 时区(Where)格式(How)。在 n8n 中,Date & Time 节点是一个非常强大的工具,只要记住核心原则:先定区,再格式化。

如果你在处理时间时还需要进行复杂的逻辑判断(比如判断是否在工作时间),可以结合 Switch 节点使用。更多 n8n 的进阶玩法,欢迎持续关注 N8N大学 (n8ndx.com),这里有你最需要的实战干货。

相关文章

n8n Error Handling 节点报错太心烦?试试这些更灵活的替代方案
n8n 节点报错了?用 Error Handling 让它自动重试并通知你
n8n Wait节点在数据同步中的延迟控制实战
n8n Wait节点免费版:我能用它实现定时任务吗?
n8n Error Handling节点:当自动化流程“翻车”时,如何让它自动“扶起来”?
n8n Error Handling节点报错常见问题解决

发布评论