如何统一各种日期时间格式?

时间:2016-02-23 05:00:05

标签: c# .net parsing datetime

我需要接受来自文本文件的DateTimeDate信息。挑战在于,这个日期信息每次都以任何格式出现。它可以采用以下任何格式。

20160131 23:30:15
31032016 23:30:15
2016/01/31 23:30:15
01/31/2016 23:30:15
31/01/2016 23:30:15
31.01.2016 23:30:15
31/01/2016 23:30
// ... more formats come with '-' separators as well and some similar format

如何将这些随机格式统一为string或甚至直接DateTime?或者是否有任何第三方库可以处理这种情况?

2 个答案:

答案 0 :(得分:2)

DateTime.Parse将为您处理几乎所有这些问题。试试看吧! : - )

如果您担心不同的分隔符,请先使用String.Replace '-' '/'进行ArrayUtils.reverse(int[] array)

更好的问题是:你如何处理07/04/2016?你无法确定它是7月4日还是4月7日,你需要某种反馈来设置它。或者

答案 1 :(得分:2)

使用TryParseExact(或ParseExact)并将所有格式指定为数组string[] formats

string[] formats = { "yyyyMMdd HH:mm:ss", "ddMMyyyy HH:mm:ss",
                    "yyyy/MM/dd HH:mm:ss", "MM/dd/yyyy HH:mm:ss" }; //and so on, add more
string dtText = "01/31/2016 23:30:15"; //example
DateTime dt;
bool result = DateTime.TryParseExact(dtText, formats, CultureInfo.InvariantCulture, 
    DateTimeStyles.AssumeLocal, out dt);

完成此操作后,您就可以处理所有指定的 DateTime格式。

重要

请注意,不可能可以统一所有可能的DateTime格式,因为其中一些互斥:< / p>

Given an ambiguous case:
"12-12-2012"

and formats:
"dd-MM-yyyy" 
"MM-dd-yyyy"

上述两种格式中只能使用一种格式。

这就是为什么,根据您的需要为每个项目进行自定义是有好处的。

如果您希望这是可重用和可自定义的,我建议您创建一个主文件(.txt.xml),它存储您可能想要使用的所有DateTime格式在你的项目中。

masterdtformat.txt

"yyyy/MM/dd HH:mm:ss"
"yyyyMMdd HH:mm:ss"
"ddMMyyyy HH:mm:ss"
"MM/dd/yyyy HH:mm:ss"
"dd-MMM-yyyy HH:mm:ss"
 //and so on...

然后,无论何时有项目,您只需要将主文件中的某些格式带到特定的项目文件中。在项目中,您加载该项目文件以提供所需的所有格式。

projectdtformat.txt

"yyyy/MM/dd HH:mm:ss"
"yyyyMMdd HH:mm:ss"
//suppose you only need two

这样,无论您指定的格式是什么,都可以重复使用。通过更改项目文件,也可以非常轻松地完成为给定项目提供有效DateTime格式的机制。