从奇怪的格式解析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的主要内容,如果未能解决你的问题,请参考以下文章