可以使C#DateTime.TryParse需要一天,一个月和一年吗?

Sam*_*ley 5 c# datetime

我正在使用DateTime.TryParse解析从Chatbot捕获的出生日期.由于Chatbot的会话特性,用户可以以各种格式输入他们的DOB,例如"jun 5 1980"或"3/21/1974".从这个意义上讲,它DateTime.TryParse是完美的,因为它可以解析这些和其他格式.

但是,如果您提供部分日期,例如"10/24"或"1977年6月",TryParse则会成功,并且缺少日期组件将被默认.对于DOB,这并不理想,因为我们不想接受不完整的日期.有没有办法防止这种违约,并告诉解析器只能成功解析定义日,月和年三个日期的日期?

小智 3

您可以将 TryParseExact 与多种格式一起使用。列出您想要的每种格式可能会有点乏味,但这样您就可以明确地了解它。

MSDN 文档

以下代码是一个使用两种格式的简单、人为的示例。我使用的是 en-US 文化,但您可以根据需要替换您自己的文化(或不变的文化)。

DateTime dt;
var str = "6/5/2007";

if (DateTime.TryParseExact(str, "MM/DD/YYYY", new CultureInfo("en-US"), DateTimeStyles.None, out dt)
    || DateTime.TryParseExact(str, "MM/DD/YY", new CultureInfo("en-US"), DateTimeStyles.None, out dt)) 
{

}
Run Code Online (Sandbox Code Playgroud)

或者

您可以将第二个重载用于DateTime.TryParseExact. 以下代码与第一个代码示例等效:

DateTime dt;
var str = "6/5/2007";

if (DateTime.TryParseExact(str, new[] { "MM/DD/YYYY", "MM/DD/YY" }, new CultureInfo("en-US"), DateTimeStyles.None, out dt))
{

}
Run Code Online (Sandbox Code Playgroud)