我正在尝试编写一个工作流,该工作流将检查我的某个实体上的“日期时间条件”字段。我想确定这个日期时间是否恰好是14天前。例如,如果今天的日期是2012年7月16日,我想找到日期时间为2012年7月2日的所有记录。
我尝试过使用Process Execution Time,但我一直都会遇到奇怪的结果。当我尝试使用“处理执行时间前14天的日期时间”时,我在7月2日的所有记录中得到0结果。当我尝试在流程执行时间之前使用13或15天时,我一直得到0结果。
然后,我尝试将“日期时间开启或之后结合处理执行时间前15天”与“日期时间开启或之前过程执行时间前13天”合并我得到了2条记录:7月2日为1,7月3日为另一条记录。
然后我将上述内容更改为“处理执行时间前15天或之后的日期时间”,“处理执行时间前14天或之前的日期时间”,我得到0条记录。
我真的对这些结果感到困惑。工作流程是否考虑了这些记录的日期和时间?例如,如果流程执行时间是7/16/2012 1:13 pm,“在14天之后或之后”是否考虑到下午1:13部分?将于2012年7月2日中午12点之后超出搜索条件,而2012年7月2日下午2点将在内部?
更新: 经过一些调查后,我发现数据库以UTC格式存储时间戳,而UI则将它们转换为PST(对于我们的时区)。然后我发现“On”比较使用的是UTC值。这对我来说毫无意义。例如,我在数据库中有2条记录,如:
日期名称
2012-06-30 06:18:29.000 Bob
2012-06-30 07:00:00.000 Henry
但在Dynamics中,它们在Advanced Find中显示为:
6/29/2012 Bob
6/30/2012亨利
每当我尝试使用“开”比较时,我似乎总是得到两个记录。当我将日期向上或向下移动1天时,我会得到0条记录。我唯一的结论是On / On或After使用UTC数据库日期,而UI则将它们显示为已转换的PST日期。
答案 0 :(得分:2)
在这种情况下,有两件事你需要注意。
首先,执行时间确实包括时间部分以及标准条件将考虑时间部分的时间或之前。
其次,您需要确保正确处理UTC时间。仅仅因为实体的时间看起来像是在7月2日从UI开始,由于UTC的偏移,它可能是一个不同的日期。因此,当您尝试确保查询表达式正常运行时,请确保知道记录中实际的UTC时间。
你的结论是正确的。 UI将始终在用户的时区中显示日期和时间,但数据库将所有时间都存储为UTC。有关如何转换您的UTC时间(假设您在工作流程中运行C#部分),请参阅this答案。