从SharePoint列表中检索的日期是将来4个小时

时间:2012-09-14 15:03:36

标签: c# sharepoint

奇怪的错误,

当插入SharePoint列表项时,我将提交的日期设置为DateTime.Now,并且它正常工作,因为当我检查SharePoint时,我看到插入的项目正确,具有正确的日期和所有值。

oListItem["Date_x0020_Submitted"] = DateTime.Now;

但是当我出于某种原因去检索完全相同的列表项时,日期会在未来4小时内回来!!

    query.ViewXml = "<View><Query><OrderBy><FieldRef Name='Date_x0020_Submitted' Ascending='FALSE' /></OrderBy></Query><RowLimit>1</RowLimit></View>";
    SP.ListItemCollection issuesCollection = oList.GetItems(query);
    MyContext.Load(issuesCollection, (items => items.Include(item => item["ID"], item => item["Date_x0020_Submitted"])));

重申一下,在插入项目之后,我可以在列表中看到它,并且插入了正确的确切日期,但是当我因某种原因检索它时,将来会有4个小时。例如在SharePoint中它向我显示10:53,但是当我检索它时显示为2:53。

有谁知道为什么会这样?对于我插入和检索的每个项目都会发生这种情况。

1 个答案:

答案 0 :(得分:3)

您存储的时间是您当地时间(UTC-5:00,可能是DST)。 Sharepoint返回的时间是否有可能以UTC时间的形式返回? Kind类的DateTime属性告诉它是什么样的时间(这已经通过不同版本的.NET框架发生了变化):

var kind = DateTime.Now.Kind;

您可以将返回的时间转换为当地时间,看它是否匹配:

var localTime = utcTime.ToLocalTime();

正如你所说,你的时间以字符串形式给出(虽然我怀疑那种格式看起来不像字符串),你可以尝试解析它:

  string fmt = "M/d/yyyy h:mm:ss tt"; // this is equivalent to format you have shown
  string stime = "9/14/2012 3:38:04 PM"; // your string here
  var time = DateTime.ParseExact(time, fmt, CultureInfo.InvariantCulture);
  var local = time.ToLocalTime(); // => 14.9.2012. 17:38:04 in my timezone