SPUtility.CreateISO8601DateTimeFromSystemDateTime 介绍
作者:杨柳@水杉网络
基本信息
程序集
Microsoft.SharePoint.dll
命名空间
Microsoft.SharePoint.Utilities
类型
静态方法
介绍
将一个系统时间转换为ISO8601时间格式的字符串(yyyy-mm-ddThh:mm:ssZ)。
方法
位于Microsoft.SharePoint.Utilities.SPUtility类,具体描述如下:
public static string CreateISO8601DateTimeFromSystemDateTime(DateTime dtValue)
{
StringBuilder builder = new StringBuilder();
builder.Append(dtValue.Year.ToString("0000"));
builder.Append("-");
builder.Append(dtValue.Month.ToString("00"));
builder.Append("-");
builder.Append(dtValue.Day.ToString("00"));
builder.Append("T");
builder.Append(dtValue.Hour.ToString("00"));
builder.Append(":");
builder.Append(dtValue.Minute.ToString("00"));
builder.Append(":");
builder.Append(dtValue.Second.ToString("00"));
builder.Append("Z");
return builder.ToString();
}
下面是维基百科对日期时间组合在ISO8601中格式的描述:
合并表示时,要在时间前面加一大写字母T,如要表示北京时间2004年5月3日下午5点30分8秒,可以写成2004-05-03T17:30:08+08:00或20040503T173008+08。
使用场景
最常见的使用场景是在SPQuery的CAML中针对日期时间字段进行查询。一般会出现两个容易忽视的地方:
- 查询时没有使用UTC标准时间,导致时区之间的差异。
- 查询语句中没有使用ISO 8601格式,导致根据特定日期时间查询异常。
第二种情况就是使用此篇介绍的API去解决,在CAML语句中使用此方法格式化后的字符串作为日期时间字符串。
<Query>
<Where>
<And>
<Gt>
<FieldRef Name='Modified' />
<Value Type='DateTime'>2015-05-29T12:00:00Z</Value>
</Gt>
<Lt>
<FieldRef Name='Modified' />
<Value Type='DateTime'>2015-05-29T10:00:00Z</Value>
</Lt>
</And>
</Where>
</Query>
测试代码
以下代码在SharePoint Powershell命令行工具中执行
#####
# 格式化后的Html字符串转换为Html格式字符串。
# 输出结果:2015-05-29T10:00:00Z (运行时环境当前的时间)
#####
[Microsoft.SharePoint.Utilities.SPUtility]::CreateISO8601DateTimeFromSystemDateTime([System.DateTime]::Now);