【问题标题】:datetime plugin crm 2011日期时间插件 crm 2011
【发布时间】:2013-07-30 10:07:48
【问题描述】:

最近,我尝试通过插件从 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 保留和显示不同的日期?

【问题讨论】:

    标签: datetime attributes dynamics-crm-2011


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 对我来说如此明显太容易了。谢谢你,斯文德伯格
    • 确保如果您使用.ToLocalTime() 调用,您知道您正在获取运行插件的服务器的时间。不是用户的时间。如果要将 UTC 时间转换为用户的时间,请看这个答案:stackoverflow.com/questions/11364982/…
    猜你喜欢
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多