2012-11-28 40 views
2

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

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

例如:

  1. 用户通过UI = 2012年11月23日00:00:00
  2. 与GMT-4时区相关联的任务的开始和结束日期创建一个记录
    • 开始日期在DB = 2012年11月24日20通过UI
    • 在DB = 2012年11月22日开始日期20点00分00秒
    • 结束日期= 2012年11月25日00:00:00
    • 结束日期: 00:00
  3. 服务的过程,记录和创建任务有开始和结束日期 - 这一次的服务帐户是在GMT + 1(BST)
    • 通过代码= 2012年11月22日20:00:00开始日期在DB通过UI
    • 在DB = 2012年11月22日开始日期19点00分00秒
    • 结束日期= 2012年11月24日20时○○分00秒
    • 结束日期= 2012年11月24日19 :00:00
  4. 用户查看创建的记录并看到任务的开始和结束da tes早4小时 - 当用户界面渲染时显示为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?

回答

3
  1. 是,唯一一次DateTime是CRM地方是,当你在代码中创建一个新的DateTime,而不是指定它是UTC,或者当它显示给用户。任何时候CRM存储'DateTime,如果它没有被指定为UTC,它会根据用户的TimeZone将它转换为UTC。
  2. 由于SDK将它作为UTC返回,因此请使用该格式。请注意,如果您创建新的DateTime,则必须指定它是UTC(DateTime to UTC),否则在保存或更新它时SDK会将其转换为UDC。
  3. 如果您始终以UTC工作,这是毫无意义的。