最近因为工作的机会接触到了一些ms crm里面的日期处理,我就在这里简要说一下我碰到的坑和我是如何解决的:

CRM里面的日期都是UTC时间

CRM是将日期以UTC格式存储在数据库里面的(注意:我虽然说的是日期,但是它是包含时间的)。从数据库读取出来以后,它会根据这个变量的设置来显示日期,通常有三个选项:

1. User Local

CRM会根据用户的时区设置,将UTC时间转换成当地时间来显示。

2. Date Only

这个不会涉及到时区转换,会直接将读取出来的UTC时间里的日期部分显示在界面上。但是这个一旦设置,就无法再改变,因为它会涉及到一些对变量的转换。这个设置以后,这个值的时间部分将一直都是00:00:00。

3. TimeZone Independence

跟Date Only相似,但是这个会把时间也显示出来。同样的,一旦设置,无法再改变。

Date Only和TimeZone Independence适用于需要在系统范围内保持时间日期一致性。比方说,一个人在伦敦订了一家酒店说要在August 8th 2016入住,那么不论是哪个地方的员工在CRM里面打开这个订单,显示的都应该是August 8th 2016。

从Web API里得到的时间也是UTC时间

使用OData Query获取来的时间是UTC格式的,如果需要转换成当地时间,需要通过Web Api来获取当前用户的时区设定,然后再使用CRM提供的时间转换Api来获得当地时间。网上有很多教程(比方说这个:How to convert the DateTime in Local and UTC Date Time format),也可以查阅微软的文档和SDK,就不一一细说了。