0

奇怪的虫子,

插入 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。

有谁知道为什么会发生这种情况?它发生在我插入和检索的每一个项目上。

4

1 回答 1

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
于 2012-09-14T15:29:08.380 回答