日期时间插件crm 2011



最近,我试图通过插件从发票实体中的自定义字段中获取日期时间值,发现它在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表中检查了实际日期时间,它正好保持在前一天,"6/30/2013"

日期、时间和时区在服务器、我的电脑和CRM中是完全相同的。

为什么CRM保留和显示不同的日期?

Dynamics CRM将数据库中的所有日期存储为UTC时间。用户界面根据用户设置中的用户本地时区转换此时间。

原因是您可能有不同时区的用户在同一CRM组织中工作,CRM必须以通用格式存储日期,以便能够向所有用户显示正确的日期和时间。

如果你想在插件中使用当地时间,你可以使用.ToLocalTime()

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

最新更新