C# 将字符串转换为不同的日期时间格式

C# 将字符串转换为不同的日期时间格式,c#,datetime,C#,Datetime,我的输入是一个烦人的自由文本,我需要在其中提取日期。该日期可能以任何异常格式出现 这是9.9.12日期 这是9912日期 这是0992012日期 任何可能的格式 dMy ddMMyy ddmmyyy Mdyy等 我可以验证文本是否为ddMMy*的日期格式,但不能验证任何其他格式。我正在查看这个链接,看看还有什么其他格式可以实现,但我没有得到任何线索 对于日期格式(如-9912),这样写是否正确 Date.ParseExact(test.ToString,"dMy", Globalization.

我的输入是一个烦人的自由文本,我需要在其中提取日期。该日期可能以任何异常格式出现

这是9.9.12日期
这是9912日期
这是0992012日期
任何可能的格式

dMy ddMMyy ddmmyyy Mdyy等

我可以验证文本是否为ddMMy*的日期格式,但不能验证任何其他格式。我正在查看这个链接,看看还有什么其他格式可以实现,但我没有得到任何线索

对于日期格式(如-9912),这样写是否正确

Date.ParseExact(test.ToString,"dMy", Globalization.CultureInfo.InvariantCulture)
如果是,则系统正在向我填充以下错误:

System.FormatException:未将字符串识别为有效的日期时间


任何人都可以分享一个可靠的方法来解决这些问题吗?

没有单一的方法来完成你想要做的事情。具体来说,由于意图如此广泛,因此很难推断用户的实际意思(例如,如何区分月份和日期)

根据您实现应用程序的方式,您需要实现输入验证

对于控制台应用程序,我可以设想您使用以下内容:

if (DateTime.TryParse(line, out value))
{
   // Parse-able date.
}
else
{
   // Non-parseable date.
}

如果您正在构建WPF应用程序,则可以使用。如果您正在构建ASP.NET MVC应用程序,还可以实现。您的里程可能会有所不同-您应该考虑限制用户可以为应用程序提供什么。

没有“可靠的方法”。代码>9912很简单;你认为11111是什么<代码>2011-11-1<代码>2011-1-11?这不是一个编程问题,而是一个概念问题:数据丢失。@Amadan是的。我确实理解这一点。然而,我必须检查的唯一条件是,如果文本是日期格式,无论格式如何。在这种情况下可能吗?您如何区分,dMy和Mdy之间的区别?它不是DateTime的通用格式,因此您需要更改输入,以仅接受某些解析为有效格式的格式format@TheGeneral我只需要验证是否存在任何日期。我在想,如果自由文本可以转换成任何datetime/date格式,那么我会将其作为有效日期传递,否则不会。