将 ISO 日期转换为 .net DateTime 时,Sitecore 8 出现奇怪的行为
Sitecore 8 strange behavior when converting ISO Date to .net DateTime
我有一个字段为“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();
这可能是因为在 Sitecore 8 中向 DateTime 字段原始值添加了时区。
此博客中描述的类似问题 post:
Sitecore 8 ServerTimeZone – my dates are all wrong
新格式的末尾包含 Z
(例如 20160907T120740Z
),它是 UTC 时间的 ISO 8601 日期时间标准的一部分,表示该时间是 UTC。
我不是 100% 确定这是否对您有帮助,但您可以尝试:
Sitecore.DateUtil.ToServerTime(dateField.DateTime).ToString("dd-MM-yyyy");
And second question is, in above code var date = dateField.DateTime.Date; I am assigning .Date to variable date but in the output I still see the time if no format is provided. I am talking about this lblTest.Text = date.ToString();
System.DateTime.Date属性仍然是一个DateTime对象,只是时间片段的默认值。如果你想丢失时间片段,你需要应用格式。
我有一个字段为“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();
这可能是因为在 Sitecore 8 中向 DateTime 字段原始值添加了时区。
此博客中描述的类似问题 post: Sitecore 8 ServerTimeZone – my dates are all wrong
新格式的末尾包含 Z
(例如 20160907T120740Z
),它是 UTC 时间的 ISO 8601 日期时间标准的一部分,表示该时间是 UTC。
我不是 100% 确定这是否对您有帮助,但您可以尝试:
Sitecore.DateUtil.ToServerTime(dateField.DateTime).ToString("dd-MM-yyyy");
And second question is, in above code var date = dateField.DateTime.Date; I am assigning .Date to variable date but in the output I still see the time if no format is provided. I am talking about this lblTest.Text = date.ToString();
System.DateTime.Date属性仍然是一个DateTime对象,只是时间片段的默认值。如果你想丢失时间片段,你需要应用格式。