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/23 00:00 と予想していた場所が 2012/11/22 23:00:00 と表示されます。 00.

ユーザーがサービスで使用されるレコードを作成すると、日付の不一致が問題を引き起こしているという問題が発生しています。

だから私はいくつかの質問があると思います:

  1. SDK EarlyBoundEntities によって返される日時はローカルまたは UTC (UTC と思われます) ですか?
  2. UTC の場合、レコードを更新/作成するコードも、設定する前に作業中の日時を UTC に変換する必要があります (つまり、取得時に datetime.ToLocal() を使用し、設定時に ToUTC() を使用します)?
  3. サーバーは夏時間に合わせて調整する必要がありますか、それとも設定された時間、つまり UTC のままにする必要がありますか?
4

1 に答える 1

3
  1. はい、DateTimeCRMでローカルであるのは、新しいDateTimeコードを作成していて、UTCであることを指定していないとき、またはユーザーに表示されているときだけです。CRMが`DateTimeを保存するときはいつでも、UTCとして指定されていない場合、ユーザーのTimeZoneに基づいてUTCに変換します。
  2. SDKはUTCとして返すため、その形式で保持します。新しいを作成する場合DateTimeは、UTC(DateTimeからUTC)であることを指定する必要があることに注意してください。指定しないと、SDKは保存または更新時にUDCに変換します。
  3. 常にUTCで作業している場合、これは重要ではありません。
于 2012-11-28T15:08:10.057 に答える