7

我的目标是使用 .NET DateTime 对象(在 C# 中),并以符合标准的方式将其序列化为字符串并从字符串中解析(用于 XML)。我想到的具体标准是表示日期和时间的 ISO 8601 标准。

我想要一个易于使用的解决方案(最好每种方法调用一个方法),它将转换为格式的连接版本和从格式的连接版本转换。我还想保留本地时区信息。

这是我想要获得的那种字符串的示例:

2009-04-15T10:55:03.0174-05:00

我的目标 .NET 版本是 3.5。

几年前,我实际上找到了解决此问题的方法,其中涉及自定义格式和 DateTime.ToString(string) 方法。令我惊讶的是,不存在更简单的符合标准的解决方案。使用自定义格式字符串以符合标准的方式进行序列化和解析对我来说有点异味。

4

4 回答 4

15

XmlConvert.ToString()幸运的是,有XmlConvert.ToDateTime()它处理这种格式:

string s = XmlConvert.ToString(DateTime.Now,
     XmlDateTimeSerializationMode.Local);
DateTime dt = XmlConvert.ToDateTime(s,
     XmlDateTimeSerializationMode.Local);

(选择合适的序列化模式)

于 2009-04-15T16:11:23.640 回答
4

dateobj.ToString("s") 将为您提供符合 ISO 8601 的字符串表示,然后可以使用 DateTime.Parse() 对其进行反序列化

于 2009-04-15T16:13:50.483 回答
3

在过去的几年里,.NET 在这方面似乎有了一些改进。System.Xml.XmlConvert对象似乎旨在解决出现在此上下文中的一整类需求。以下函数似乎专门设计用于以灵活且符合标准的方式处理 DateTime 对象的转换。

XmlConvert.ToDateTime(string, System.Xml.XmlDateTimeSerializationMode)


XmlConvert.ToString(DateTime, System.Xml.XmlDateTimeSerializationMode)

在您想要保留原始时区信息的情况下,以下枚举成员似乎特别有用:

System.Xml.XmlDateTimeSerializationMode.RoundtripKind

以下是 MSDN 上功能文档的链接:

XmlConvert.ToDateTime(字符串,System.Xml.XmlDateTimeSerializationMode)

XmlConvert.ToString(日期时间,System.Xml.XmlDateTimeSerializationMode)

于 2009-04-15T16:12:54.167 回答
1

试试这个:

System.Xml.XmlConvert.ToString(TimeStamp, System.Xml.XmlDateTimeSerializationMode.Utc))
于 2009-04-15T16:13:09.393 回答