1

我正在尝试编写一个工作流来检查我的一个实体上的日期时间字段的条件。我想确定这个日期时间是否正好是 14 天前。例如,如果今天的日期是 2012 年 7 月 16 日,我想查找日期时间为 2012 年 7 月 2 日的所有记录。

我尝试过使用 Process Execution Time,但我一直得到奇怪的结果。当我尝试使用“流程执行时间前 14 天的日期时间”时,我在 7 月 2 日的所有记录中得到了 0 个结果。当我尝试在流程执行时间前 13 或 15 天使用时,我一直得到 0 个结果。

然后,我尝试将“日期时间在流程执行时间之前 15 天或之后”与“日期时间在流程执行时间之前 13 天或之前”结合起来,我得到了 2 条记录:1 条用于 7 月 2 日,另一条用于 7 月 3 日。

然后,我将上述内容更改为“日期时间在流程执行时间之前 15 天或之后”,“日期时间在流程执行时间之前 14 天或之前”,我得到了 0 条记录。

我真的对这些结果感到困惑。工作流程是否考虑到这些记录的日期时间?例如,如果流程执行时间是 2012 年 7 月 16 日下午 1:13,“在 14 天或之后”是否考虑了下午 1:13 部分?2012 年 7 月 2 日下午 12:00 是否会在搜索条件之外,而 2012 年 7 月 2 日下午 2 点会在搜索条件之内吗?

更新:经过一番调查,我发现数据库以 UTC 存储时间戳,而 UI 将它们转换为 PST(对于我们的时区)。然后我发现“打开”比较使用的是 UTC 值。这对我来说毫无意义。例如,我在数据库中有 2 条记录,如下所示:

日期名称

2012-06-30 06:18:29.000 鲍勃

2012-06-30 07:00:00.000 亨利

但在 Dynamics 中,它们在 Advanced Find 中显示为:

2012 年 6 月 29 日鲍勃

2012 年 6 月 30 日亨利

每当我尝试使用“开”比较时,我似乎总是得到两条记录。当我将日期向上或向下移动 1 天时,我会得到 0 条记录。我唯一的结论是 On/On 或 After 使用的是 UTC 数据库日期,而 UI 将它们显示为转换后的 PST 日期。

4

1 回答 1

2

在这种情况下,有两件事,但您需要注意。

首先,执行时间确实包括时间部分,并且在或之前的条件条件也将考虑时间部分。

其次,您需要确保您正确处理 UTC 时间。仅仅因为实体的时间从 UI 看起来像是 7 月 2 日,由于 UTC 偏移,它可能是不同的日期。因此,当您尝试确保查询表达式正确运行时,请确保您知道记录中的实际 UTC 时间。

你的结论是正确的。UI 将始终以用户的时区显示日期和时间,但数据库将所有时间存储为 UTC。请参阅答案以了解如何转换您的时间 UTC(假设您正在运行 C# 部分到您的工作流程)

于 2012-07-17T12:54:11.200 回答