XML文件中日期/时间的正确格式是什么?

106

在使用.NET写入XML文件时,我应该使用什么日期/时间格式? 我只需要使用 DateTime.ToString() 吗,还是必须使用特定的格式?

5个回答

144
我总是使用ISO 8601格式(例如2008-10-31T15:07:38.6875000-05:00)-- date.ToString("o")。这也是XSD日期格式。这是首选格式和标准日期和时间格式字符串,尽管如果您不想在日期和时间之间使用'T',则可以使用手动格式字符串:date.ToString("yyyy-MM-dd HH:mm:ss"); 编辑:如果您正在使用从XSD或Web服务生成的类,则可以直接将DateTime实例分配给类属性。如果您正在编写XML文本,则使用上述方法。

47

编辑:这是错误的建议。请使用上述的“o”。使用“s”会产生错误的结果

我总是使用这个:

dateTime.ToUniversalTime().ToString("s");

如果你的架构看起来像这样,那么这是正确的:

<xs:element name="startdate" type="xs:dateTime"/>

这将导致:

<startdate>2002-05-30T09:00:00</startdate>

您可以在此处获取更多信息:http://www.w3schools.com/xml/schema_dtypes_date.asp


10
请记住,这将把日期转换为协调世界时(UTC)。在处理日期时,除非您完全使用UTC,否则必须根据语言环境将其转换回当前时区。此外,通常您需要在末尾加上“Z”来表示该日期是UTC。 - Ryan
当我从Soap UI调用一个.NET Web服务时,使用"s"对我有效。 - Tristan Channing

5
如果您手动组装XML字符串,请使用 var.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffZ")); 这将输出官方的XML日期时间格式。但如果使用内置序列化方法,则无需担心格式。

jonnii的代码将基本返回相同的结果。 - chilltemp
3
在这种情况下,所有日期必须使用协调世界时(UTC)时区,否则使用“Z”后缀是错误的。 - Fr0sT
我会重复之前的评论 - 如果 dt 不是 UTC 时间的话,这实际上是不正确的。 - Brady Moritz

3

DTD有什么要说的?

如果XML文件是用于与其他现有软件(例如SOAP)通信,则应检查该软件以了解其期望值。

如果XML文件用于序列化或与不存在的软件(例如您正在编写的软件)通信,则可以定义它。在这种情况下,我建议选择易于解析您所选语言并且对人类易于阅读的格式。例如,如果您的语言(无论是VB.NET还是C#.NET等)可以轻松解析ISO日期(YYYY-MM-DD),那么我建议使用这种格式。


0

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