【问题标题】:Parse DateTime in c# from strange format从奇怪的格式解析C#中的DateTime
【发布时间】:2010-02-10 07:18:23
【问题描述】:

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

【问题讨论】:

    标签: c# datetime parsing format culture


    【解决方案1】:

    您可以将 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";
    

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

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

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这是将string 解析为DateTime 的最有效方法。在没有格式信息的情况下使用 .Parse().TryParse() 进行解析真是太慢了!
    猜你喜欢
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    相关资源
    最近更新 更多