C# Sitecore 8将ISO日期转换为.net日期时间时的奇怪行为
我有一个带有字段“C# Sitecore 8将ISO日期转换为.net日期时间时的奇怪行为,c#,sitecore,sitecore8,C#,Sitecore,Sitecore8,我有一个带有字段“生日””的项目。值为“15/03/1977”,原始值为“19770315000000”。我举了一个例子 现在,以下代码的输出为: var item=Sitecore.Context.Database.GetItem({8935CD35-5EAD-4C8E-B85C-E95E9B1ED5C3}); DateField DateField=(DateField)项。字段[“生日”]; //日期时间对象 var date=dateField.DateTime.date; //串 lb
生日”
”的项目。值为“15/03/1977
”,原始值为“19770315000000
”。我举了一个例子
现在,以下代码的输出为:
var item=Sitecore.Context.Database.GetItem({8935CD35-5EAD-4C8E-B85C-E95E9B1ED5C3});
DateField DateField=(DateField)项。字段[“生日”];
//日期时间对象
var date=dateField.DateTime.date;
//串
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()代码>这可能是因为在Sitecore 8的DateTime字段原始值中添加了时区
这篇博文中描述的类似问题:
新格式末尾包含Z
(例如20160907T120740Z
),它是UTC时间的ISO 8601日期时间标准的一部分,表示该时间为UTC时间
我不能100%确定这是否对您有帮助,但您可以尝试:
Sitecore.DateUtil.ToServerTime(dateField.DateTime.ToString(“dd-MM-yyyy”);
第二个问题是,在上面的代码中,var date=dateField.DateTime.date;我正在将.Date赋值给变量Date,但是如果没有提供格式,我仍然可以在输出中看到时间。我说的是lblTest.Text=date.ToString()
System.DateTime.Date属性仍然是一个DateTime对象,只有时间片段的默认值。如果希望丢失时间片段,则需要应用格式