0

最近、プラグインを介して Invoice エンティティのカスタム フィールドから日時値を取得しようとしたところ、CRM フォームに表示されている日付の前日を返すことがわかりました。たとえば、 「2013 年 7 月 1 日と入力すると、C# で次のコードは「2013 年 6 月 30 日」を返します

EntityReference eRef = new EntityReference(localContext.PluginExecutionContext.PrimaryEntityName, localContext.PluginExecutionContext.PrimaryEntityId);
var invoice = localContext.OrganizationService.Retrieve(eRef.LogicalName, eRef.Id, new ColumnSet(true));
string start = ((DateTime)invoice["revg_startdate"]).ToString(); //here I get 6/30/2013

次に、関連する MS SQL テーブルで実際の日時を確認したところ、ちょうど 1 日前の「2013年 6 月 30 日」が保持されています。

日付、時刻、およびタイムゾーンは、サーバー、PC、および CRM でまったく同じです。

CRMが異なる日付を保持および表示するのはなぜですか?

4

1 に答える 1

2

Dynamics CRM は、すべての日付を UTC 時間としてデータベースに保存します。今回変換するユーザー インターフェイスは、ユーザー設定のユーザーのローカル タイム ゾーンに基づいています。

これは、異なるタイム ゾーンのユーザーが同じ CRM 組織で作業している可能性があり、CRM はすべてのユーザーに正しい日付と時刻を表示できるように共通の形式で日付を保存する必要があるためです。

プラグインで現地時間が必要な場合は、使用できます.ToLocalTime()

string start = ((DateTime)invoice["revg_startdate"]).ToLocalTime().ToString(); 
于 2013-07-30T10:36:40.763 に答える