奇怪的错误,
当插入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。
有谁知道为什么会这样?对于我插入和检索的每个项目都会发生这种情况。
答案 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