SPListItem.GetFormattedValue, кажется, имеет странное поведение для полей DateTime.
Он получает значение DateTime через индексатор SPListItem, который в соответствии с этой статьей 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, и конвертирует ее в местное время, независимо от того, какой это тип. (Отражатель показывает, что он использует GetFieldValueAsText, который использует value.ToString (), но по какой-то причине он предполагает время в формате UTC.)
Конечным результатом является то, что строковое представление в поле времени, полученное через listItem.GetFormattedValue () (по крайней мере, в моем случае), является неправильным, и является местным временем + (местное время - UTC).
Кто-нибудь сталкивался с такой же проблемой с SPListItem.GetFormattedValue () и каков был ваш обходной путь?