axk*_*axk 6 sharepoint moss datetime
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;
}
Run Code Online (Sandbox Code Playgroud)
所以它使用SPListItem的索引器来检索值,而不是使用SPFields.GetFieldValueAsHtml来格式化值.GetFieldValueAsHtml似乎假设日期是UTC并将其转换为本地时间,无论它是什么类型.(Reflector显示它使用GetFieldValueAsText,它使用value.ToString()但由于某种原因,它假设时间为UTC.)
最终结果是通过listItem.GetFormattedValue()获得的时间字段上的字符串表示(至少在我的情况下)是不正确的,是本地时间+(本地时间 - UTC).
有没有人遇到与SPListItem.GetFormattedValue()相同的问题,你的解决方法是什么?
在调用GetFieldValueAsHtml之前将日期转换回通用时间工作正常.
DateTime localTime = (DateTime)item["DueDate"];
// this is local time but if you do localDateTime.Kind it returns Unspecified
// treats the date as universal time..
// let's give it the universal time :)
DateTime universalTime = SPContext.Current.Web
.RegionalSettings.TimeZone.LocalTimeToUTC(localTime);
string correctFormattedValue =
item.Fields["DueDate"].GetFieldValueAsHtml(universalTime);
Run Code Online (Sandbox Code Playgroud)