2008-11-10 10 views
6

SPListItem.GetFormattedValue डेटटाइम फ़ील्ड के लिए एक अजीब व्यवहार प्रतीत होता है। यह SPListItem के इंडेक्सर के माध्यम से डेटटाइम मान पुनर्प्राप्त करता है जो इस MSDN article के अनुसार स्थानीय समय देता है। यहाँ परावर्तकMOSS 2007: 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 मानता है कि तिथि यूटीसी में है और इसे स्थानीय समय में परिवर्तित करें चाहे इससे कोई फर्क नहीं पड़ता। (परावर्तक दिखाता है कि यह GetFieldValueAsText का उपयोग करता है जो value.ToString() का उपयोग करता है लेकिन कुछ कारणों से यह समय यूटीसी बनता है।)

अंत परिणाम यह है कि एक समय क्षेत्र पर स्ट्रिंग प्रस्तुति गड़बड़ सूची प्राप्त की गई है। GetFormattedValue() (कम से कम मेरे मामले में) गलत है, स्थानीय समय + (स्थानीय समय - यूटीसी) होने के नाते।

क्या किसी को भी 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

उत्कृष्ट उत्तर - उम्मीद है कि यह सही के रूप में ध्वजांकित हो जाए! बीटीडब्ल्यू - एक ही समस्या SPFieldDateTime.GetFieldValueAsHtml (दिनांक समय, SPWeb, SPDateFormat) पर लागू होती है – Ryan

0

मुझे शेयरपॉइंट में यूटीसी से दिनांक रूपांतरण के साथ एक मान्यता प्राप्त बग मिला है। यह एसपी 1 में तय किया गया था।

+0

एचएम, न तो MOSS 2007 SP1 या WSS 2007 SP1 के विवरण (KBs) में नहीं मिल सकता है। – axk

+0

हाँ, मैं खुद को छोड़कर आश्चर्यचकित था। – Nat

+0

क्या यह विशेष बग था? क्या आपके पास केबी संदर्भ है? मैंने WSS 3 SP1 + का परीक्षण किया है और यह अभी भी वहां है। – Ryan

संबंधित मुद्दे