SharePoint 2010 客户端模型获取本地日期

      最近在一个项目里,用客户端模型获取日期类型的字段,发现获取的结果总是和实际值的时间不对,初看起来是提前一天,但是经过仔细的分析,发现时间只是提前了8个小时。

这个很容易想到的就是时区问题,经过检查发现管理中心和站点的时区都设置为北京时间的,即是我们国人常用的时区,但是为什么还是相差8个小时呢? 首先得说明的是用服务器

直接获取日期类型的时间并不会出现这种情况。

      现在就来解释一下为什么客户端模型获取日期类型的数据会是这样?

原因是SharePoint 2010数据库存储时间的时候都是用UTC时间进行存储,而在SharePoint的站点中显示时间是根据各位设置的时区内型来显示的,假设我们的时区是北京的,那么SharePoint

2010设置的显示时间就是北京时区的时间,而客户端获取日期格式的实质上是UTC时间,而不是本地时区时间,从而导致了看见的错误。

      下面一段代码可以解决这个问题:

// 获取列表日期内型的字段值
DateTime UTCDateTime = (DateTime)item[dateTime.InternalName];

// 日期格式进行转换
SP.ClientResult<string> result = Utility.FormatDateTime(clientContext, clientContext.Web, UTCDateTime, DateTimeFormat.DateTime);

SP.Web web = clientContext.Web;
clientContext.Load(web);
clientContext.ExecuteQuery();

// 得到本地时间日期
DateTime rightTime = Convert.ToDateTime(result.Value, new CultureInfo((int)web.Language));

       这样就解决了我们的问题。

You also can see the guy's blog: http://www.dev4side.com/community/blog/2011/1/5/incorrect-dates-taken-from-sharepoint-2010-client-object-model.aspx

posted @ 2012-03-19 18:00  CoderRunner  阅读(527)  评论(0编辑  收藏  举报