转换日期和时间值

上次修改时间: 2010年4月15日

适用范围: SharePoint Foundation 2010

Microsoft SharePoint Foundation 以协调世界时 (UTC) 格式存储日期和时间值,而且几乎所有由对象模型成员返回的日期和时间都是 UTC 格式。一个例外是通过 SPListItem 类的索引器获取的列表栏值,其格式为网站的本地时间。使用 SPQuery 类的 DatesInUtc 属性可使用索引器返回 UTC 格式的值。

若要将值从 UTC 格式转换为本地时间,请使用 SPTimeZone 类的 UTCToLocalTime 方法,该方法可以通过当前网站的 RegionalSettings 属性进行访问,如下所示:mySite.RegionalSettings.TimeZone.UtcTimeToLocalTime(date)。若要将值从本地时间转换为 UTC 格式,请使用 LocalTimeToUTC 方法。

除了在本地和 UTC 时间格式之间进行转换外,您可能还需要在日期和时间格式之间转换,例如,从 ISO8601 格式 (YYYY-MM-DDTHH:MM:SSZ) 转换为 System.DateTime 格式(mm/dd/yyyy hh:mm:ss AM 或 PM),或反向转换。SPUtility 类提供了几种可用于转换或修改日期和时间值的格式的方法,如下所示:

  • CreateISO8601DateTimeFromSystemDateTime - 从系统日期时间格式转换为 ISO8601 日期时间格式 (yyyy-mm-ddThh:mm:ssZ)。例如,当使用基于 System.DateTime 值的筛选器构建查询时,此方法非常有用。下面的示例返回文档库中在过去五天内修改过的所有项目:

    Dim query As New SPQuery()
    
    query.Query = 
        String.Format("<Where><Gt><FieldRef Name='Modified'/>" _
        & "<Value Type='DateTime' 
        StorageTZ='TRUE'>{0}</Value></Gt></Where>", _
        SPUtility.CreateISO8601DateTimeFromSystemDateTime
        (DateTime.UtcNow.AddDays(-5)))
    
    SPQuery query = new SPQuery();
    
    query.Query = 
        String.Format("<Where><Gt><FieldRef Name='Modified'/>" +
        "<Value Type='DateTime' 
        StorageTZ='TRUE'>{0}</Value></Gt></Where>",
        SPUtility.CreateISO8601DateTimeFromSystemDateTime
        (DateTime.UtcNow.AddDays(-5)));
    

    在此示例中,CreateISO8601DateTimeFromSystemDateTime 方法将 DateTime 值转换为 ISO8601 格式,以便在使用协作应用程序标记语言 (CAML) 的查询字符串内使用。System.String 的 Format 方法会将转换后的值插入查询字符串。

  • CreateSystemDateTimeFromXmlDataDateTimeFormat - 从 ISO8601 日期时间格式转换为 System.DateTime 格式(与前面的方法相反)。

    例如,您可以将此方法用于文档库事件处理程序,其中的自定义 DateTime 列值通过 SPListEvent 类的 PropertiesBeforePropertiesAfter 属性返回 ISO8601 格式的字符串。此方法可用于将字符串转换为 DateTime 值。

  • FormatDate - 使用网站的当前区域设置从 System.DateTime 格式转换为指定的 SPDateFormat 格式。

  • ParseDate - 使用网站的当前区域设置从指定的包含日期和时间值的字符串转换为 System.DateTime 对象。

请参阅

概念

如何:设置区域性和语言

SharePoint 开发任务 - 如何实现?

使用列表对象和集合