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

时间:2010-02-10 07:18:24

标签: c# datetime parsing format culture

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

2 个答案:

答案 0 :(得分: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));
    }
}

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

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

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

null调用中的ParseExact表示“使用当前的文化” - 在这种情况下,它不太可能有太大的区别,但一个常用的替代方法是CultureInfo.InvariantCulture

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

答案 1 :(得分:7)

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