我需要接受来自文本文件的DateTime
或Date
信息。挑战在于,这个日期信息每次都以任何格式出现。它可以采用以下任何格式。
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
?或者是否有任何第三方库可以处理这种情况?
答案 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
格式的机制。