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

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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 项目纠正了这种情况,我希望它能更快地解析和格式化 - 但目前还远未准备好生产。

【讨论】:

msdn.microsoft.com/en-us/library/8kb3ddd4.aspx 具有相关解析,如果您提供自己的 formatString【参考方案2】:

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

【讨论】:

这是将string 解析为DateTime 的最有效方法。在没有格式信息的情况下使用 .Parse().TryParse() 进行解析真是太慢了!

以上是关于从奇怪的格式解析C#中的DateTime的主要内容,如果未能解决你的问题,请参考以下文章

从串口解析/格式化数据 - C#

DateTime.Parse 美国日期格式 C#

C# 把list中的数据转成规定格式的json格式

C#中怎么解析JSON数据?

关于C#从Word文件中提取内容(包括样式文字,图片,公式,表格)等信息,解析分字段写入数据库的问题。

C# 中解析此日期格式“Mon Oct 07 00:00:00 EDT 2013”​​的正确方法是啥?