最近,我尝试从Invoice entity throuhg插件中的自定义字段获取datetime值,并发现它返回CRM表单中显示的日期前一天。对于incstance,我输入了“7/1/2013”,在我的C#中,以下代码返回“6/30/2013”:
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表中的实际日期时间,并且它正好在前一天保持,“6/30/2013”
日期,时间和时区在服务器,我的电脑和CRM中完全相同。
为什么CRM会保留并显示不同的日期?
答案 0 :(得分:2)
Dynamics CRM将数据库中的所有日期存储为UTC时间。用户界面根据用户设置中的用户本地时区进行此时间转换。
原因是您可以让不同时区的用户在同一个CRM组织中工作,而CRM必须以通用格式存储日期,以便能够向所有用户显示正确的日期和时间。 / p>
如果您想在插件中使用本地时间,可以使用.ToLocalTime()
string start = ((DateTime)invoice["revg_startdate"]).ToLocalTime().ToString();