考虑到:

DateTime.UtcNow

我如何获得一个字符串,它表示在ISO 8601兼容的格式相同的值?

请注意,ISO 8601定义了许多类似的格式。我想要的具体格式是:

yyyy-MM-ddTHH:mm:ssZ

当前回答

如果你在SharePoint 2010或更高版本下开发,你可以使用

using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
...
string strISODate = SPUtility.CreateISO8601DateTimeFromSystemDateTime(DateTime.Now)

其他回答

如果你在SharePoint 2010或更高版本下开发,你可以使用

using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
...
string strISODate = SPUtility.CreateISO8601DateTimeFromSystemDateTime(DateTime.Now)

我将使用XmlConvert:

XmlConvert.ToString(DateTime.UtcNow, XmlDateTimeSerializationMode.RoundtripKind);

它会自动保存时区。

你可以用下面的代码得到“Z”(ISO 8601 UTC):

Dim tmpDate As DateTime = New DateTime(Now.Ticks, DateTimeKind.Utc)
Dim res as String = tmpDate.toString("o") '2009-06-15T13:45:30.0000000Z

原因如下:

ISO 8601有一些不同的格式:

DateTimeKind。当地的

2009-06-15T13:45:30.0000000-07:00

DateTimeKind。Utc

2009-06-15T13:45:30.0000000Z

DateTimeKind。未指明的

2009-06-15T13:45:30.0000000

.NET为我们提供了一个包含这些选项的枚举:

'2009-06-15T13:45:30.0000000-07:00
Dim strTmp1 As String = New DateTime(Now.Ticks, DateTimeKind.Local).ToString("o")

'2009-06-15T13:45:30.0000000Z
Dim strTmp2 As String = New DateTime(Now.Ticks, DateTimeKind.Utc).ToString("o")

'2009-06-15T13:45:30.0000000
Dim strTmp3 As String = New DateTime(Now.Ticks, DateTimeKind.Unspecified).ToString("o")

注意:如果你将Visual Studio 2008的“watch utility”应用到toString(“o”)部分,你可能会得到不同的结果,我不知道这是否是一个bug,但在这种情况下,如果你正在调试,使用String变量会得到更好的结果。

来源:标准日期和时间格式字符串(MSDN)

DateTime.Now.ToString("yyyy-MM-dd'T'HH:mm:ss zzz");

DateTime.Now.ToString("O");

注意:根据您在终端所做的转换,您将使用第一行(最接近它)或第二行。

确保只在本地时间应用格式,因为“zzz”是UTC转换的时区信息。

DateTime.UtcNow。ToString("s", System.Globalization.CultureInfo.InvariantCulture)应该给你你想要的,因为"s"格式说明符被描述为一个可排序的日期/时间模式;符合ISO 8601标准。

编辑:为了得到OP要求的额外Z,使用“o”而不是“s”。