当将"12-5"或"12,5"作为.NET中DateTime.TryParse的输入时,将其转换为"12-05-2020",返回值为true。"12-5“如何等于"12-05-2020"?在我的例子中,输入字符串是用户的出生日期,根据要求它是一个免费文本,解析的值"12-05-2020“没有任何意义,因为出生日期不能是未来的日期。是否有一种方法可以不使用DateTime.Parse或DateTime.ParseExact来纠正这种情况,因为它们可能会引发异常。
发布于 2020-03-02 12:12:12
那么,您需要执行2测试:
bla-bla-bla不是bla-bla-bla),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
} 发布于 2020-03-02 12:05:33
正如@Rafalon建议的那样,使用DateTime.TryParseExact来避免异常并设置所需的格式。
string dateformat = "12-05";
bool answer = DateTime.TryParseExact(dateformat, "dd-MM-yyyy", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out DateTime result);https://stackoverflow.com/questions/60488257
复制相似问题