代码之家  ›  专栏  ›  技术社区  ›  Hiren Solanki

CRM 2011,插件和DST中的日期

  •  2
  • Hiren Solanki  · 技术社区  · 11 年前

    我有一个问题,我自己解决了,但还需要一些文字来确认我的想法是否100%正确,因为我没有找到任何文件来证明自己是正确的。

    我的服务器当前处于DST时间,CRM UI也显示1小时后存储在数据库中的数据。没关系。

    当我用插件计算和存储数据时,在我的插件更新操作完成后,CRM平台从我保存的数据中扣除1小时。我已经读到,当我们通过SDK相关的日期时间进行一些操作时,CRM会按原样存储日期时间。是不是时间在DST中,平台也会扣除1小时?

    作为一项决议,我已经评论了我的扣除1小时并让CRM现在就做的行。

    我的理解是否正确,或者如果有人可以提供任何文档URL,这将是值得注意的。

    2 回复  |  直到 8 年前
        1
  •  4
  •   Daryl    11 年前

    在SDK中工作的任何时候,DateTime都会被检索并存储为UTC。CRM web平台将UTC时间转换为用户的时间。你不需要做任何时间转换,只需要使用UTC。

    让我们假设您的当地时间是UTC-1(使用DST,因为UTC没有观测到它)。因此,如果UTC是14:00,您的当地时间是13:00。 我们还假设您的插件将填充当前时间(明天)的实体的日期属性。如果代码如下所示:

    entity.new_SomeDate = DateTime.Now.AddDays(1);
    service.Update(entity);
    

    假设DateTime.Now是13:00,它将13:00存储在数据库中(就像是UTC一样)。然后,当您从CRM网站查看时间值时,由于您是UTC-1,它将显示12:00,尽管您希望13:00。

    现在,如果您的代码如下所示:

    entity.new_SomeDate = DateTime.UtcNow.AddDays(1);
    service.Update(entity);
    

    假设DateTime.UtcNow是13:00,则它将在数据库中存储14:00,因为DateTime.UtcNow是14:00。然后,当你从CRM网站上查看时间值时,由于你是UTC-1,它将显示13:00,因为它将采用UTC值-1。

    现在,如果您的代码如下所示:

    entity.new_SomeDate = entity.new_UserEnteredDateFromCrm.AddDays(1);
    service.Update(entity);
    

    new_UserEnteredDateFromCrm将已经从用户的时区转换为UTC,它将按预期工作。

    这使得你更喜欢作为日期存储的DateTimes变得非常困难(任何人的生日?),你可能需要更深入地思考它。

        2
  •  0
  •   Hiren Solanki    11 年前

    我自己想好了。该日期中有一个组件,它探究它的日期时间类型。它可以是Utc、Local或Unspecified。

    当您通过代码向CRM属性传递任何日期时。确保日期时间类型为Utc,否则CRM服务内部操作会将其转换为Utc。

    在我的情况下,我被困在了这一点上,因为当我从CRM中读取日期时,我必须在该日期开始办公。例如,我需要 03/02/2014 12:00 03/02/2014 8:30 使进入日期与办公开始时间一致。我在做手术,

    DateTime InDate = Case.CreatedOn.Value;
    DateTime Dt = new DateTime(InDate.Year,InDate.Month,InDate.Day,8,30,0)
    

    将InDate设置为Utc Time时,我正在创建新的日期对象,因此它将DateTime类型从Utc更改为Local(在DST中,它意味着要提前1小时)

    要避免,请始终将DateTime类型设置为与提供给新对象的日期完全相同。例如上述操作可以类似地替代地进行。

    DateTime InDate = Case.CreatedOn.Value;
    DateTime Dt = new DateTime(InDate.Year,InDate.Month,InDate.Day,8,30,0)
    Dt = DateTime.SpecifyKind(Dt,DateTimeKind.Utc)
    

    希望有帮助。