如何以符合标准的方式在.NET中序列化DateTime对象

时间:2009-04-15 16:08:20

标签: .net datetime standards-compliance

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

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

以下是我想要获得的字符串类型的示例:

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

我的目标.NET版本是3.5。

几年前我实际上找到了这个问题的解决方案,它涉及自定义格式和DateTime.ToString(string)方法。我很惊讶没有一个更简单的符合标准的解决方案。使用自定义格式字符串以符合标准的方式进行序列化和解析会让我感到有些气味。

4 个答案:

答案 0 :(得分:15)

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

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

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

答案 1 :(得分:4)

dateobj.ToString(“s”)将为您提供符合ISO 8601标准的字符串表示形式,然后可以使用DateTime.Parse()

对其进行反序列化

答案 2 :(得分: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(string, System.Xml.XmlDateTimeSerializationMode)

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

答案 3 :(得分:1)

试试这个:

System.Xml.XmlConvert.ToString(TimeStamp, System.Xml.XmlDateTimeSerializationMode.Utc))