最近,我尝试从Invoice实体throuhg插件的自定义字段中获取datetime值,发现它返回的日期早于CRM表单中显示的日期的前一天。为了方便起见,我输入了“ 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”的前一天
服务器,我的PC和CRM中的日期,时间和时区绝对相同。
为什么CRM会保留并显示不同的日期?
Dynamics CRM将所有日期存储为UTC时间在数据库中。用户界面将根据用户设置中的用户本地时区来转换此时间。
这样做的原因是,您可以让处于不同时区的用户在同一个CRM组织中工作,并且CRM必须以一种通用格式存储日期,以便能够向所有用户显示正确的日期和时间。
如果您想在插件中使用本地时间,则可以使用 .ToLocalTime()
string start = ((DateTime)invoice["revg_startdate"]).ToLocalTime().ToString();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句