我有以下字符串“12-5”,我正在尝试使用 .NET 中的 TryParse 解析它。它返回 true,如何为给定的字符串实现 false?
I have the following string "12-5" and I'm trying to parse it using TryParse in .NET. It returned true, How to acheive a false for the given string?
将 "12-5" 或 "12,5" 作为 .NET 中 DateTime.TryParse 的输入,它会将其转换为 "12-05-2020",并且 return 值为 true。 “12-5”如何等于“12-05-2020”?在我的例子中,输入字符串是用户的出生日期,根据要求它是一个自由文本,解析值“12-05-2020”没有意义,因为出生日期不能是未来的日期。有没有一种方法可以在不使用 DateTime.Parse 或 DateTime.ParseExact 的情况下更正此问题,因为它们可能会抛出异常。
正如@Rafalon 所建议的那样,使用 DateTime.TryParseExact 来避免异常并设置您想要的格式。
string dateformat = "12-05";
bool answer = DateTime.TryParseExact(dateformat, "dd-MM-yyyy", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out DateTime result);
嗯,您有 2 个测试要执行:
- 对于有效日期语法(比如,
bla-bla-bla
不是一个)
- 对于有效日期 value(例如,
25-03-2123
不是一个)
让我们一起检查这些要求 if
:
string userInput = "12-05-15"; // 12 May 2015
...
// We can use several formats in one go:
// DateTime.TryParseExact will try formats in the given order
string[] allowedFormats = new string[] {
"d-M-yy", "d-M-yyyy", "MMM d yyyy",
};
if (DateTime.TryParseExact(
userInput.Trim(), // let's tolerate leading/trailing whitespaces
allowedFormats,
CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None,
out var result) &&
result <= DateTime.Today &&
result >= DateTime.Today.AddYears(-150)) {
// result is
// 1. Valid date
// 2. At least 150 years ago
// 3. At most today
}
else {
// userInput doesn't meet at least one criterium
}
将 "12-5" 或 "12,5" 作为 .NET 中 DateTime.TryParse 的输入,它会将其转换为 "12-05-2020",并且 return 值为 true。 “12-5”如何等于“12-05-2020”?在我的例子中,输入字符串是用户的出生日期,根据要求它是一个自由文本,解析值“12-05-2020”没有意义,因为出生日期不能是未来的日期。有没有一种方法可以在不使用 DateTime.Parse 或 DateTime.ParseExact 的情况下更正此问题,因为它们可能会抛出异常。
正如@Rafalon 所建议的那样,使用 DateTime.TryParseExact 来避免异常并设置您想要的格式。
string dateformat = "12-05";
bool answer = DateTime.TryParseExact(dateformat, "dd-MM-yyyy", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out DateTime result);
嗯,您有 2 个测试要执行:
- 对于有效日期语法(比如,
bla-bla-bla
不是一个) - 对于有效日期 value(例如,
25-03-2123
不是一个)
让我们一起检查这些要求 if
:
string userInput = "12-05-15"; // 12 May 2015
...
// We can use several formats in one go:
// DateTime.TryParseExact will try formats in the given order
string[] allowedFormats = new string[] {
"d-M-yy", "d-M-yyyy", "MMM d yyyy",
};
if (DateTime.TryParseExact(
userInput.Trim(), // let's tolerate leading/trailing whitespaces
allowedFormats,
CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None,
out var result) &&
result <= DateTime.Today &&
result >= DateTime.Today.AddYears(-150)) {
// result is
// 1. Valid date
// 2. At least 150 years ago
// 3. At most today
}
else {
// userInput doesn't meet at least one criterium
}