目次
在使用 Salesforce 流程自动执行操作时,日期和时间经常被用作检索数据的条件。但是,Salesforce 在系统内以 UTC(协调世界时)管理日期和时间信息,因此以日本时间 (JST) 指定条件可能会产生意想不到的结果。本文将解释 UTC 和 JST 之间的差异,您在根据流程中的日期和时间获取数据时应注意这些差异。
1. Salesforce 中日期和时间管理的基础知识
Salesforce DateTime 类型字段在内部以**UTC(协调世界时)**存储,在 Salesforce 中有时称为 “GMT”,但从技术上讲,UTC 才是正确的表示法。
当用户在用户界面上输入日期和时间时,Salesforce 会根据用户的时区设置调整显示。例如,如果日本用户输入 “2025/09/06 10:00″,Salesforce 内部会将其存储为 “2025/09/06 01:00 UTC”。
换句话说,用户的时区显示和内部存储的时间是有区别的,这一点很重要。
要点
- 日期类型项目:不受时区影响
- 日期时间类型项目:以 UTC 保存,并在显示时转换为用户的时区(这就是我们在这里讨论的内容)
- 时间类型项目:不受时区影响
2. 流程中 “获取元素(获取记录)”的注意事项
在 Salesforce 流程中使用 “获取元素 “检索受日期和时间限制的记录时,很容易出现问题。
示例:获取特定时间段记录的情况
当您要检索日本标准时间 “2025/09/06 10:00-15:00 “之间创建的记录时:
日本标准时间
日本标准时间 10:00 → 美国中部时间 01:00
日本标准时间 15:00 → 美国中部时间 06:00
流程中的实际条件如下
创建日期 >= 2025/09/06 01:00:00Z AND
创建日期 <= 2025/09/06 06:00:00Z
如上图所示,日本标准时间和世界协调时间相差 9 个小时,导致无法检索到预期时间段内的记录。请务必使用调试功能检查是否能检索到目标时区的记录。
4. 对策
(1) 使用日期类型字段和 DATEVALUE 函数
如果您想以 “日期单位 “获取记录,而不用担心日期/时间的时间部分,可以使用
DATEVALUE(CreatedDate) = TODAY()
这种方法可以将日期准确地确定为用户时区的今天。
(2) 利用公式资源进行时区转换
在最多指定一个时间时,使用公式资源明确执行时区转换。
公式示例:将 JST 时间转换为 UTC
datetimevalue("2025-09-06 10:00:00") - time(9, 0, 0, 0)
5. 需要注意的情况
计划触发流程
每天午夜触发的计划流程根据创建流程的用户所在的时区执行。如果流程是由日本用户创建的,则将在日本标准时间午夜运行。
6. 最佳实践
推荐的设计模式
- 仅日期条件:使用
DATEVALUE() 函数
- 包含时间的条件:在公式资源中进行显式时区转换
- 测试:对不同时区的用户进行测试
代码示例:创建安全的日期/时间条件
公式资源示例
今天的开始时间(将 JST 00:00 转换为 UTC)
datetimevalue(text(today()) " 00:00:00") - time(9, 0, 0, 0)
今天的结束时间(从日本标准时间 23:59 转换为世界协调时)
datetimevalue(text(today()) " 23:59:59") - time(9, 0, 0, 0, 0)
7. 总结。
在 Salesforce 流程中以日期和时间为条件检索记录时,必须牢记以下几点:
要点。
- Salesforce 内部以 UTC 管理 DateTime 类型字段
- 在 JST 中设置条件时,要考虑到与 UTC 的时差(-9 小时)
- 使用 DATEVALUE 函数获取日期单位
- 在公式资源中明确转换涉及时间的条件
通过实践,可以大大减少获取错误和意外行为。