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

本文关键字:时间 格式 日期 何统一 | 更新日期: 2023-09-27 18:35:43

我需要接受文本文件中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?或者是否有任何第三方库可以处理这种情况?

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

使用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格式,因为其中一些格式是互斥的

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格式的机制也将非常容易地完成。

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

如果您担心不同的分隔符,请先对'/'进行'-' String.Replace

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