0

最近,我尝试通过插件从 Invoice 实体中的自定义字段获取日期时间值,发现它返回 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 表中的实际日期时间,它准确地保持在前一天,“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 回答