让'DateTime.ToString()'输出与'DateTime'的XML序列化相同的字符串

5

在C#中,是否有一个标准的DateTime格式,可以与ToString方法一起使用,生成与将DateTime序列化为XML时生成的格式相同的格式?

例如:2013-03-20T13:32:45.5316112Z

3个回答

4

我认为你需要具体说明:

dateTime.ToString(“yyyy-MM-ddTHH:mm:ss.fffffffZ”);

您在使用正确的时区方面需要特别注意。 这里有更多详细信息。


看起来在这里也是如此。似乎序列化的工作方式略有不同。 - StampedeXV

3

请看这里:

http://msdn.microsoft.com/en-us/library/az4se3k1.aspx#UniversalFull

您需要的格式是:

myDate.ToString("u");

例子:

DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
Console.WriteLine(date1.ToUniversalTime().ToString("u"));
// Displays 2008-04-10 13:30:00Z           

然而,这并不是你想要的(虽然可能仍能工作),因此你可能需要使用自定义格式:

DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
Console.WriteLine(date1.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffZ"));
// Displays 2008-04-10T13:30:00.000000Z           

很接近了,但是它使用空格来分隔日期和时间,而不是 T - Damien_The_Unbeliever
1
编辑后还需显示T,记得先将日期转换为UTC! - KaraokeStu

3

.ToString("o") 似乎解决了这个问题。


那个似乎会少了结尾的 "z"。 - Matthew Watson
1
Z在那里使用了那个参数。 - user1450877
啊,有趣 - MSDN文档的示例中没有这个。 - Matthew Watson
@MatthewWatson,你提供的链接现在已经更新到.NET Framework 4.6和4.5,其中UTC DateTime格式化示例现在在输出中包括了Z2009-06-15T13:45:30 (DateTimeKind.Utc) --> 2009-06-15T13:45:30.0000000Z - DavidRR
不完全如此:DateTime t1 = DateTime.Parse("2016-08-02T12:35:04.140625"); XMLSerialization 将其转换为 <?xml version="1.0" encoding="utf-8"?> <dateTime>2016-08-02T12:35:04.140625</dateTime> 而 t1.ToString("o") 的结果是 "2016-08-02T12:35:04.1406250"。这只是一个小差异,但我目前正在寻找结果的字符串相等性,所以只想提出这个小差异。 - StampedeXV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接