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 は、value.ToString() を使用する GetFieldValueAsText を使用していることを示していますが、何らかの理由で時刻が UTC であると想定しています。)
最終結果は、listItem.GetFormattedValue() (少なくとも私の場合) を介して取得された時間フィールドの文字列表現が正しくなく、現地時間 + (現地時間 - UTC) であるということです。
SPListItem.GetFormattedValue() で同じ問題に遭遇した人はいますか? 回避策は何ですか?