2016-11-29 50 views
1

我有一个字段为“Birthday”的项目。值为“15/03/1977”,原始值为“19770315T000000”。我从hereSitecore将ISO日期转换为.net时的8个奇怪行为DateTime

例如现在的下面的代码输出为:

var item = Sitecore.Context.Database.GetItem("{8935CD35-5EAD-4C8E-B85C-E95E9B1ED5C3}"); 
DateField dateField = (DateField)item.Fields["Birthdate"]; 
// DateTime object 
var date = dateField.DateTime.Date; 
// String 
lblTest.Text = date.ToString(); 

输出

3/14/1977 12:00:00 AM // Instead of 15 here date is 14 

如果我格式化字符串为 “dd-MM-yyyy”:

lblTest.Text = date.ToString("dd-MM-yyyy"); 

输出

14-03-1977 

我不知道为什么我有这样的差别,保存日期是15/03/1977,输出为14-03-1977

第二个问题是,在上面的代码var date = dateField.DateTime.Date;我分配.Date变量date但在输出我仍然看到时间,如果没有提供格式。我讲的这个lblTest.Text = date.ToString();

回答

3

这可能是因为时区添加到DateTime字段的原始值Sitecore的8

在这个博客中

类似的问题: Sitecore 8 ServerTimeZone – my dates are all wrong

新的格式包含Z结尾(例如20160907T120740Z),它是UTC时间的ISO 8601日期时间标准的一部分,并指示该时间为UTC。

我不是100%肯定这是否会帮助你,但你可以尝试:

Sitecore.DateUtil.ToServerTime(dateField.DateTime).ToString("dd-MM-yyyy"); 
0

而第二个问题是,在上面的代码VAR日期= dateField.DateTime.Date;我将.Date分配给变量日期,但在输出中,如果没有提供格式,我仍会看到时间。我在说这个lblTest.Text = date.ToString();

System.DateTime.Date属性仍然是DateTime对象,只是时间片段的默认值。如果您想丢失时间片段,您需要应用格式。