2009-04-15 44 views
7

我的目標是使用.NET DateTime對象(使用C#),並以某種方式將其序列化爲字符串(用於XML中)並進行解析這是符合標準的。我想到的具體標準是代表日期和時間的ISO 8601標準。如何以符合標準的方式在.NET中序列化DateTime對象

我想要一個易於使用的解決方案(最好是一種方法調用每個方法) 將轉換和格式的連接版本。我也想保留本地時區信息。

這是我想獲得排序字符串的例子:

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

我的目標.NET版本是3.5。

幾年前我實際上找到了解決這個問題的一個解決方案,它涉及一個自定義格式和DateTime.ToString(string)方法。我很驚訝,一個更簡單的標準兼容解決方案不存在。使用自定義的格式字符串以符合標準的方式進行序列化和解析,這對我來說是一種嗅覺。

回答

15

幸運的是,XmlConvert.ToString()XmlConvert.ToDateTime()負責處理此格式:

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

(選擇你合適的序列模式)

+0

你老前輩是反序列化肯定快速的平局。 :-) – 2009-04-15 16:41:41

3

它看起來像.NET提高了一點點在這方面過去幾年。 System.Xml.XmlConvert對象似乎旨在解決出現在此上下文中的全部需求。以下功能看起來專門設計用於以靈活且符合標準的方式來處理DateTime對象的轉換。

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


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

以下枚舉成員似乎要保留原始時區信息的情況下尤其有用:在MSDN上

System.Xml.XmlDateTimeSerializationMode.RoundtripKind 

這裏是鏈接到文檔的功能:

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

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

1

試試這個:

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

dateobj.ToString( 「S」)將讓你的ISO 8601兼容的字符串表示,然後可以用DateTime.Parse()

相關問題