2010-02-10 73 views
14

如果我有一個奇怪的格式,如YYYY##MM##DD HH**M**SS日期時間字符串,我如何創建一個新的日期時間對象基礎?我已閱讀了有關datetimeformatinfoclass的一些信息,但不知道如何使其工作。從奇怪的格式解析日期時間在C#中

回答

26

您可以使用DateTime.ParseExact,或DateTime.TryParseExact爲這你就不信心數據例如:

using System; 

class Test 
{ 
    static void Main() 
    { 
     string formatString = "yyyy'##'MM'##'dd' 'HH'*'mm'*'ss"; 
     string sampleData = "2010##02##10 07*22*15"; 
     Console.WriteLine(DateTime.ParseExact(sampleData, 
               formatString, 
               null)); 
    } 
} 

格式字符串的引號不是絕對必要的 - 這會工作。太:

string formatString = "yyyy##MM##dd HH*mm*ss"; 

但是,使用引號意味着你是明確了引號之間的字符被字面上的使用,而不是理解爲模式字符 - 因此,如果你改變了「#」改爲「/」使用引號的版本肯定會使用「/」,而ve沒有使用rsion會使用文化特定的值。

在通話中的nullParseExact表示「使用目前的文化」 - 在這種情況下,它不會帶來多大的改變,但是一個常用有效的選擇是CultureInfo.InvariantCulture

不幸的是,沒有辦法讓BCL解析格式字符串並保留信息;我自己的Noda Time項目糾正了這種情況,我希望能夠更快地進行解析和格式化 - 但目前遠沒有生產準備。

+2

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx有相關的解析,如果你提供你自己的formatString – Tanzelax 2010-02-10 07:27:52

7

您可以使用DateTime.ParseExact方法並傳遞所需的格式。

+0

這是將'string'解析爲'DateTime'的最有效方法。使用'.Parse()'和'.TryParse()'解析沒有格式信息是f..king該死的慢! – 2010-02-10 07:22:15