将未知格式的字符串转换为c#中的日期

我搜索了stackoverflow的答案,但没有运气。 我正在开发一个Windows应用程序,我有一些不同日期格式的字符串,例如。

dd/MM/yyyy MM/dd/yyyy MM-dd-yyyy dd-MM-yyyy dd/MM/yyyy hh:mm::ss MM/dd/yyyy hh:mm::ss etc... 

但我需要转换为通用格式 – dd/MM/yyyy 。 该应用程序可以在不同文化的任何Windows机器上运行。

这样做的正确方法是什么?

编辑:还有一件事我可能不知道传入字符串的格式是什么。

提前致谢。

使用DateTime.ParseExact将不同的模式作为格式。

如果在解析之后你真的需要使用字符串表示,请使用DateTimeToString方法,使用您感兴趣的显式格式(这样它就是文化不变的)。 但是保留DateTime更好,因为这与格式无关。

您可以区分使用不同分隔符的那些格式(即“/”vs“ – ”)。 但是你怎么知道10月10日的日期是代表11月10日还是10月11日? 如果一个数字不大于12,那么在不知道确切格式的情况下,没有可靠的方法可以做到这一点。

正如其他人所指出的,如果您确实知道确切的格式,那么您可以使用DateTime.ParseExact

如果您正在处理一些具有相同未知格式的大量日期的导入文件,您可以尝试不同的格式,并希望只有一个不会给出格式错误。

或者换句话说:将“日期”分成三个数字,并检查每个数字的值范围。 值> 1900将是年。 如果您发现1到31之间的值,那么这些将是几天。 从1到12的值可能是几个月,但也可能是几天。 尝试并识别每个部分。

最好的方法是向供应商询问格式的日期。

要在不同的文化上运行这个程序,我认为你应该创建一个函数来识别这种字符串格式的文化,然后使用Datetime.Parse