将ISO日期转换为.net DateTime时,Sitecore 8出现奇怪的行为

时间:2016-11-29 08:09:42

标签: c# sitecore sitecore8

我有一个字段为“Birthday”的项目。值为“15/03/1977”,原始值为“19770315T000000”。我从here

中取得了榜样

现在以下代码的输出是:

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();

2 个答案:

答案 0 :(得分:3)

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

此博文中描述的类似问题: Sitecore 8 ServerTimeZone – my dates are all wrong

新格式最后包含20160907T120740Z(例如Sitecore.DateUtil.ToServerTime(dateField.DateTime).ToString("dd-MM-yyyy"); ),它是UTC时间的ISO 8601日期时间标准的一部分,并表示该时间是UTC。

我不能100%确定这是否会对您有所帮助,但您可以尝试:

set.addAnimation(anim);

答案 1 :(得分:0)

  

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

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