2008-11-10 5 views
6

SPListItem.GetFormattedValue에 DateTime 필드에 이상한 동작이있는 것 같습니다. 이 MSDN article에 따라 로컬 시간을 반환하는 SPListItem의 인덱서를 통해 DateTime 값을 검색합니다. 여기 MOSS 2007 : DateTime 필드의 SPListItem.GetFormattedValue에 버그가 있습니까?

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가 될 것으로 가정합니다.

결과적으로 trough listItem.GetFormattedValue()에서 얻은 시간 필드의 문자열 표현은 (적어도 내 경우에는) 현지 시간 + (현지 시간 - UTC) 인 올바르지 않습니다.

누군가 SPListItem.GetFormattedValue()에서 동일한 문제가 발생했으며 해결 방법은 무엇입니까?

+0

혹시 다른 사람이 그 문제를 겪었는지 또는 그 문제를 해결하기 위해 무엇을했는지 알고 싶습니까? –

+0

둘 다 : 확실한 해결 방법이 있지만. – axk

답변

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); 
+0

우수 답변 - 올바른 것으로 플래그가 표시되기를 바랍니다! BTW - 동일한 문제가 SPFieldDateTime.GetFieldValueAsHtml (DateTime, SPWeb, SPDateFormat)에 적용됩니다. – Ryan

0

SharePoint의 UTC에서 날짜 변환으로 알려진 버그가있었습니다. SP1에서 수정되었습니다.

+0

흠, MOSS 2007 SP1 또는 WSS 2007 SP1 설명 (KB)에서 찾을 수 없습니다. – axk

+0

그래, 나 자신이 누락 된 것에 놀랐다. – Nat

+0

이 특정 버그입니까? KB 참조가 있습니까? 나는 WSS 3 SP1 +과 그곳에서 여전히 테스트를 마쳤습니다. – Ryan