我有一个可以跨多个时区工作的 Dynamics CRM 系统。用户在他们当地的时区工作,我有一些与他们创建的实体交互的服务。
所有代码都是通过 SDK 生成的早期绑定实体类完成的。
例如:
- 用户在 GMT-4 时区创建具有关联任务开始和结束日期的记录
- 通过 UI 的开始日期 = 2012/11/23 00:00:00
- DB 中的开始日期 = 2012/11/22 20:00:00
- 通过 UI 的结束日期 = 2012/11/25 00:00:00
- DB 中的结束日期 = 2012/11/24 20:00:00
- 记录和创建具有开始和结束日期的任务的服务进程 - 这次服务帐户位于 GMT+1 (BST)
- 通过代码的开始日期 = 2012/11/22 20:00:00
- DB 中的开始日期 = 2012/11/22 19:00:00
- 通过 UI 的结束日期 = 2012/11/24 20:00:00
- DB 中的结束日期 = 2012/11/24 19:00:00
- 用户查看创建的记录并看到任务开始和结束日期提前 4 小时 - 当 UI 呈现时,它显示为 2012/11/22 23:00:00,而用户期望 2012/11/23 00:00: 00.
我看到当用户创建由服务使用的记录时,日期不匹配导致问题的问题。
所以我想我有很多问题:
- SDK EarlyBoundEntities 返回的日期时间是本地还是 UTC(我怀疑是 UTC)?
- 如果它在UTC中,我更新/创建记录的代码是否应该在设置之前将我工作的日期时间转换为UTC(即在获取时使用datetime.ToLocal(),在设置时使用ToUTC())?
- 我的服务器应该调整夏令时还是应该保持在设定的时间,即UTC?