C# 从SharePoint列表中检索到的日期为未来4小时

C# 从SharePoint列表中检索到的日期为未来4小时,c#,sharepoint,C#,Sharepoint,奇怪的虫子 在插入SharePoint列表项目时,我将提交日期设置为DateTime。现在,它工作正常,就像我检查SharePoint时看到插入的项目具有正确的日期和所有值一样 oListItem["Date_x0020_Submitted"] = DateTime.Now; 但是,当我出于某种原因去检索完全相同的列表项时,日期会回到4小时后 query.ViewXml = "<View><Query><OrderBy><FieldRef Na

奇怪的虫子

在插入SharePoint列表项目时,我将提交日期设置为DateTime。现在,它工作正常,就像我检查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"])));
query.ViewXml=“1”;
SP.ListItemCollection issueCollection=oList.GetItems(查询);
加载(issuesCollection,(items=>items.Include(item=>item[“ID”],item=>item[“Date\ux0020\usubmitted”]));
只是重申一下,在插入项目后,我可以在列表中看到它,并且插入了正确的确切日期,但是由于某种原因,当我检索到它时,它是4个小时以后的事了。例如,在SharePoint中,它显示为10:53,但当我检索时,它显示为2:53


有人知道为什么会这样吗?它发生在我插入和检索的每个项目上。

您存储的时间是您的本地时间(UTC-5:00,可能是DST)。 Sharepoint返回的时间是否有可能返回为UTC时间<
DateTime
类的code>Kind属性告诉我们它是什么类型的时间(这在不同版本的.NET framework中有所改变):

您可以将返回的时间转换为本地时间,并查看其是否匹配:

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

存储的时间是本地时间(UTC-5:00,可能是DST)。 Sharepoint返回的时间是否有可能返回为UTC时间<
DateTime
类的code>Kind属性告诉我们它是什么类型的时间(这在不同版本的.NET framework中有所改变):

您可以将返回的时间转换为本地时间,并查看其是否匹配:

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

这两个值的
Kind
属性表示什么?根据sharepoint列表设置,日期是“日期和时间”属性。。但是,在SharePoint中,该日期再次显示在列表中,并带有正确的日期。只有在检索时它才会更改。。。SharePoint是否在检索时以某种方式更改了日期?服务器或您的电脑上设置的实际时间可能有问题。。或者时区?我对sharepoint一无所知,但您存储到列表中的值(DateTime.Now)已
Kind
等于
Local
。从SP检索到的值也是DateTime类型,对吗?如果是这样,它的
Kind
属性会说什么,
local
UTC
<代码>UTC将有意义,这取决于您所在的时区。我的虚拟机表示(GMT-05:00)东部时间(美国和加拿大),而SharePoint服务器表示(UTC-05:00)东部时间(美国和加拿大)。。。不确定这怎么会造成4小时的差异这两个值的
种类
属性表示什么?根据sharepoint列表设置,日期是“日期和时间”属性。。但是,在SharePoint中,该日期再次显示在列表中,并带有正确的日期。只有在检索时它才会更改。。。SharePoint是否在检索时以某种方式更改了日期?服务器或您的电脑上设置的实际时间可能有问题。。或者时区?我对sharepoint一无所知,但您存储到列表中的值(DateTime.Now)已
Kind
等于
Local
。从SP检索到的值也是DateTime类型,对吗?如果是这样,它的
Kind
属性会说什么,
local
UTC
<代码>UTC
将有意义,这取决于您所在的时区。我的虚拟机表示(GMT-05:00)东部时间(美国和加拿大),而SharePoint服务器表示(UTC-05:00)东部时间(美国和加拿大)。。。我不确定这怎么会造成4小时的差异。正如我在上面的评论中所说,它实际上是作为DateTime返回的。谢谢你澄清发生的事情!现在,我应该对插入日期的方式进行任何更改,还是因为该日期在SharePoint server列表中看起来不错,所以我感觉很奇怪,windows任务栏右下角的日期在两台计算机上显示的日期完全相同,SharePoint中的日期与我的VM中的日期相同。。时区是UTC,但在我的机器上是GMT。。。当从那里检索日期时,它将从两个时间变为未来的4小时。。但也许我只是对日期了解得不够。不幸的是,我无法帮助您使用Sharepoint,因为我不使用它。关于不同的值,我希望您的机器显示本地时间,这对于GUI来说是正常的。然而,Sharepoint似乎返回UTC时间。这是有意义的,因为客户端可能是地理分布的。这样,他们都知道给定的时间意味着什么,而对于本地时间,则不清楚(DateTime类不携带时区),或者他们必须始终将其转换为区域设置。很高兴我能帮上忙。正如我在上面的评论中所说,它实际上是作为日期时间返回的。谢谢你澄清发生的事情!现在,我应该对插入日期的方式进行任何更改,还是因为该日期在SharePoint server列表中看起来不错,所以我感觉很奇怪,windows任务栏右下角的日期在两台计算机上显示的日期完全相同,SharePoint中的日期与我的VM中的日期相同。。时区是UTC,但在我的机器上是GMT。。。当从那里检索日期时,它将从两个时间变为未来的4小时。。但也许我只是对日期了解得不够。不幸的是,我无法帮助您使用Sharepoint,因为我不使用它。关于不同的值,我希望您的机器显示本地时间,这对于GUI来说是正常的。然而,Sharepoint似乎返回UTC时间。这对于客户来说是有意义的