从奇怪的格式解析c#中的DateTime

Gra*_*ant 15 c# format culture datetime parsing

如果我有一个奇怪格式的日期时间字符串,例如YYYY##MM##DD HH**M**SS,如何基于它创建一个新的日期时间对象?我已经阅读了一些关于datetimeformatinfoclass的内容,但不知道如何让它工作..

Jon*_*eet 27

您可以将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));
    }
}
Run Code Online (Sandbox Code Playgroud)

格式字符串中的引号不是绝对必要的 - 这也可以使用:

string formatString = "yyyy##MM##dd HH*mm*ss";
Run Code Online (Sandbox Code Playgroud)

但是,使用引号意味着您明确指出引号之间的字符将按字面意思使用,而不是被理解为模式字符 - 因此,如果您将"#"更改为"/",则使用引号的版本肯定会使用"/" "而没有的版本将使用特定于文化的价值.

null在调用ParseExact表示"使用目前的文化" -在这种情况下,它不会带来多大的改变,但是一个常用有用的替代是CultureInfo.InvariantCulture.

不幸的是,没有办法让BCL解析格式字符串并保留信息; 我自己的Noda Time项目纠正了这种情况,我希望它能够更快地解析和格式化 - 但目前还远没有生产就绪.

  • http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx有相关的解析,如果你提供自己的formatString (2认同)

Gio*_*rgi 7

您可以使用DateTime.ParseExact方法并传递所需的格式.