2

我有一个可以跨多个时区工作的 Dynamics CRM 系统。用户在他们当地的时区工作,我有一些与他们创建的实体交互的服务。

所有代码都是通过 SDK 生成的早期绑定实体类完成的。

例如:

  1. 用户在 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
  2. 记录和创建具有开始和结束日期的任务的服务进程 - 这次服务帐户位于 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
  3. 用户查看创建的记录并看到任务开始和结束日期提前 4 小时 - 当 UI 呈现时,它显示为 2012/11/22 23:00:00,而用户期望 2012/11/23 00:00: 00.

我看到当用户创建由服务使用的记录时,日期不匹配导致问题的问题。

所以我想我有很多问题:

  1. SDK EarlyBoundEntities 返回的日期时间是本地还是 UTC(我怀疑是 UTC)?
  2. 如果它在UTC中,我更新/创建记录的代码是否应该在设置之前将我工作的日期时间转换为UTC(即在获取时使用datetime.ToLocal(),在设置时使用ToUTC())?
  3. 我的服务器应该调整夏令时还是应该保持在设定的时间,即UTC?
4

1 回答 1

3
  1. 是的,在 CRM 中本地化的唯一时间DateTime是您在代码中创建新DateTime代码,而不是指定它是 UTC,或者当它显示给用户时。任何时候 CRM 都会存储一个 `DateTime,如果它没有指定为 UTC,它会根据用户的 TimeZone 将其转换为 UTC。
  2. 由于 SDK 将其作为 UTC 返回,因此请保持该格式。请注意,如果您创建一个新的DateTime,则必须指定它是 UTC(DateTime 到 UTC),否则 SDK 会在您保存或更新它时将其转换为 UDC。
  3. 如果您总是在 UTC 中工作,这是没有意义的。
于 2012-11-28T15:08:10.057 回答