C# MS CRM 2011 effectiveintervalend在数据库中不正确

C# MS CRM 2011 effectiveintervalend在数据库中不正确,c#,dynamics-crm-2011,C#,Dynamics Crm 2011,我不知道为什么,但存储业务闭包的日历规则在UI和DB中有所不同。例如,如果您使用参数start=01.01.2014和End=02.01.2014以及days=2创建业务关闭,那么在CRM DB(表[CalendarRuleBase])中,您将获得 effectiveintervalstart = 01.01.2014, effectiveintervalend = 03.01.2014. 使用SDK检索数据时,您将得到相同的结果: Entity org = service.Retrie

我不知道为什么,但存储业务闭包的日历规则在UI和DB中有所不同。例如,如果您使用参数start=01.01.2014和End=02.01.2014以及days=2创建业务关闭,那么在CRM DB(表[CalendarRuleBase])中,您将获得

 effectiveintervalstart = 01.01.2014, effectiveintervalend = 03.01.2014. 
使用SDK检索数据时,您将得到相同的结果:

 Entity org = service.Retrieve("organization", context.OrganizationId, new Microsoft.Xrm.Sdk.Query.ColumnSet("businessclosurecalendarid"));

        QueryExpression q = new QueryExpression("calendar");
        q.ColumnSet = new ColumnSet(true);
        q.Criteria = new FilterExpression();
        q.Criteria.AddCondition(new ConditionExpression("calendarid", ConditionOperator.Equal, org["businessclosurecalendarid"].ToString()));            
        Entity businessClosureCalendar = service.RetrieveMultiple(q).Entities[0];
        if (businessClosureCalendar != null)
        {
            return businessClosureCalendar.GetAttributeValue<EntityCollection>("calendarrules").Entities.ToList();
        }
Entity org=service.Retrieve(“组织”,context.OrganizationId,新的Microsoft.Xrm.Sdk.Query.ColumnSet(“businessclosurecalendarid”);
QueryExpression q=新的QueryExpression(“日历”);
q、 ColumnSet=新的ColumnSet(true);
q、 条件=新筛选器表达式();
q、 Criteria.AddCondition(新的ConditionExpression(“calendarid”,ConditionOperator.Equal,org[“businessclosurecalendarid”].ToString());
实体businessClosureCalendar=service.RetrieveMultiple(q).Entities[0];
如果(businessClosureCalendar!=null)
{
返回businessClosureCalendar.GetAttributeValue(“calendarrules”).Entities.ToList();
}

你知道为什么会这样吗?effectiveintervalend是否总是比UI enddate值大一天?

Dynamics CRM数据库中的日期以UTC格式存储,CRM UI会自动将其转换为本地时间,以便用户看到正确的时间


使用SDK检索datetime字段时,值不会自动转换,因此需要使用
ToLocalTime()
根据进行SDK调用的用户的时区获取值。

查看此答案以及其他类似问题的链接: