2012-11-28 39 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工作,這是毫無意義的。