Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Sitecore 8将ISO日期转换为.net日期时间时的奇怪行为_C#_Sitecore_Sitecore8 - Fatal编程技术网

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对象,只有时间片段的默认值。如果希望丢失时间片段,则需要应用格式