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

时间:2012-07-10 07:17:04

标签: c# .net

我搜索了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机器上运行。

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

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

提前致谢。

4 个答案:

答案 0 :(得分:8)

DateTime.ParseExact与格式不同的模式一起使用。

如果解析后确实需要使用字符串表示形式,请使用ToString的{​​{1}}方法,使用您感兴趣的显式格式(这样它就是文化不变的)。但是保留DateTime会更好,因为这与格式无关。

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

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

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

最好的方法是询问这些日期的供应商。

答案 3 :(得分:0)

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