2008-11-10 11 views
6

SPListItem.GetFormattedValue dường như có một hành vi lạ đối với các trường DateTime. Nó truy xuất giá trị DateTime thông qua chỉ mục của SPListItem, theo đó MSDN article trả lại thời gian địa phương này. Dưới đây là một đoạn trích từ ReflectorMOSS 2007: SPListItem.GetFormattedValue cho các trường DateTime có lỗi?

public string GetFormattedValue(string fieldName) 
{ 
    SPField field = this.Fields.GetField(fieldName); 
    if (field != null) 
    { 
     return field.GetFieldValueAsHtml(this[fieldName]); 
    } 
    return null; 
} 

Vì vậy, nó sử dụng indexer SPListItem của để lấy giá trị và hơn SPFields.GetFieldValueAsHtml để định dạng giá trị. GetFieldValueAsHtml dường như giả sử ngày tháng là UTC và chuyển đổi nó thành giờ địa phương cho dù nó là loại nào. (Reflector cho thấy rằng nó sử dụng GetFieldValueAsText mà sử dụng value.ToString() nhưng đối với một số lý do nó giả định thời gian để được UTC.)

Kết quả cuối cùng là biểu diễn chuỗi trên một trường thời gian thu được trough listItem.GetFormattedValue() (ít nhất là trong trường hợp của tôi) là không chính xác, là giờ địa phương + (giờ địa phương - UTC).

Có ai gặp vấn đề tương tự với SPListItem.GetFormattedValue() và cách giải quyết của bạn là gì?

+0

Bạn có muốn biết liệu có ai khác đã gặp nó hoặc cũng là những gì họ đã làm để vượt qua không? –

+0

Both :) Mặc dù có một cách giải quyết rõ ràng. – axk

Trả lời

7

Chuyển đổi ngày trở về thời gian quốc tế trước khi gọi GetFieldValueAsHtml hoạt động tốt.

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

Câu trả lời hay - hy vọng nó được gắn cờ chính xác! BTW - cùng một vấn đề áp dụng cho SPFieldDateTime.GetFieldValueAsHtml (DateTime, SPWeb, SPDateFormat) – Ryan

0

Tôi đã có lỗi được công nhận với chuyển đổi ngày từ UTC trong SharePoint. Nó đã được sửa trong SP1.

+0

Hm, không thể tìm thấy nó trong phần mô tả (KB) của MOSS 2007 SP1 hoặc WSS 2007 SP1. – axk

+0

Vâng, tôi đã rất ngạc nhiên bởi bản thân mình. – Nat

+0

Có phải là lỗi đặc biệt này không? Bạn có tham chiếu KB không? Tôi đã thử nghiệm WSS 3 SP1 + và nó vẫn còn đó. – Ryan

Các vấn đề liên quan