SPListItem.GetFormattedValue 似乎对 DateTime 字段有一个奇怪的行为。它通过 SPListItem 的索引器检索 DateTime 值,根据此MSDN 文章返回本地时间。这是Reflector的一个片段
public string GetFormattedValue(string fieldName)
{
SPField field = this.Fields.GetField(fieldName);
if (field != null)
{
return field.GetFieldValueAsHtml(this[fieldName]);
}
return null;
}
所以它使用 SPListItem 的索引器来检索值,然后使用 SPFields.GetFieldValueAsHtml 来格式化值。GetFieldValueAsHtml 似乎假定日期为 UTC 并将其转换为本地时间,无论它是什么类型。(Reflector 显示它使用 GetFieldValueAsText,它使用 value.ToString() 但由于某种原因,它假定时间为 UTC。)
最终结果是通过 listItem.GetFormattedValue() 获得的时间字段上的字符串表示(至少在我的情况下)不正确,是本地时间 +(本地时间 - UTC)。
有人遇到过与 SPListItem.GetFormattedValue() 相同的问题吗?您的解决方法是什么?