我有以下字符串“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 个测试要执行:

  1. 对于有效日期语法(比如,bla-bla-bla不是一个)
  2. 对于有效日期 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
   }