6

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() で同じ問題に遭遇した人はいますか? 回避策は何ですか?

4

2 に答える 2

7

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);
于 2009-01-19T10:20:48.523 に答える
0

SharePoint での UTC からの日付変換に関する認識済みのバグがありました。SP1 で修正されました。

于 2008-11-10T19:45:43.870 に答える