2013-07-30 3 views
0

В последнее время я попытался получить значение datetime из настраиваемого поля в плагине суффикса entity-фактуры и обнаружил, что он возвращает день до даты, отображаемой в форме CRM. Для incstance, я вошел "7/1/2013" и в моей C# следующий код возвращает "6/30/2013":плагин datetime crm 2011

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 

Затем я проверил фактическую DateTime в соответствующей таблице MS SQL , и он хранится ровно за день до этого, «6/30/2013»

Дата, время и часовой пояс абсолютно идентичны на сервере, на моем ПК и в CRM.

Почему CRM хранит и отображает разные даты?

ответ

2

Dynamics CRM сохраняет все даты в базе данных как UTC. Пользовательский интерфейс преобразует это время на основе локального часового пояса пользователей из пользовательских настроек.

Причина в том, что вы можете иметь пользователей в разных часовых поясах, работающих в одной и той же организации CRM, и CRM должны хранить даты в общем формате, чтобы иметь возможность показывать правильную дату и время для всех пользователей.

Если вы хотите местное время в плагине вы можете использовать .ToLocalTime()

string start = ((DateTime)invoice["revg_startdate"]).ToLocalTime().ToString(); 
+0

идеальный ответ, +1 –

+0

это слишком просто, чтобы быть настолько очевидным для меня. Спасибо, Svendberg – Gostapko

+2

Убедитесь, что если вы используете вызов '.ToLocalTime()', то знаете, что вы получаете время на сервере, на котором запущен плагин. Не время пользователя. Если вы хотите преобразовать время UTC во время пользователя, см. Этот ответ: http://stackoverflow.com/questions/11364982/server-side-fetchxml-returns-different-results/11367508#11367508 – Daryl