2010-02-10 94 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