0

在 SharePoint 2007 中,当我将文档保存到文档库时,已修改下的列表视图中显示的值为:

18/6/2012 13:06

但是,当我以编程方式访问我认为是 SPListItem.File.TimeLastModified 的字段时,它返回:

18/6/2012 3:06:43 AM

这意味着 1 已被截断,因此无论读取值如何,都将下午 1 点变成了凌晨 3 点。

该网站和网站都继承了正确的时区。我应该怎么做才能使 TimeLastModified 显示正确的时间?或者这有可能吗?

谢谢。

4

1 回答 1

1

TimeLastModified属性始终以 UTC 格式返回值。SP 页面上显示的日期/时间值通常会根据当前用户的文化转换为时区。在用户的时区中显示所有内容,但在内部以 UTC 格式保存值是一种很好的做法。

如果要将 UTC 值转换为当前用户的时区,然后在 UI 中打印,可以使用以下代码:

SPFile file = ...;
SPWeb web = ...; // SPContext.Current.Web or file.Item.ParentList.ParentWeb or ...
DateTime time = UTCToWebTime(file.TimeLastModified, web);
string text = FormatWebTime(time, web);

DateTime UTCToWebTime(DateTime utcTime, SPWeb web) {
    SPTimeZone timeZone = web.RegionalSettings.TimeZone;
    DateTime localTime = timeZone.UTCToLocalTime(utcTime);
    return DateTime.SpecifyKind(localTime, DateTimeKind.Local);
}

// Uses SPRegionalSettings to be more accurate then value.ToString(web.Locale).
string FormatWebTime(DateTime value, SPWeb web) {
    SPRegionalSettings regionalSettings = web.RegionalSettings;
    DateOptions dateOptions = new DateOptions(
        regionalSettings.LocaleId.ToString(CultureInfo.InvariantCulture),
        (SPCalendarType) regionalSettings.CalendarType, null,
        regionalSettings.FirstDayOfWeek.ToString(CultureInfo.InvariantCulture),
        regionalSettings.AdjustHijriDays.ToString(CultureInfo.InvariantCulture),
        null, null));
    string timePattern = regionalSettings.Time24 ?
        dateOptions.TimePattern24Hour : dateOptions.TimePattern12Hour;
    DateTimeFormatInfo format = web.Locale.DateTimeFormat;
    return value.ToString(format.ShortDatePattern, format) + " " +
        value.ToString(timePattern, format);
}

--- 费尔达

于 2012-06-18T20:03:44.430 回答