首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我有以下字符串"12-5“,我试图使用TryParse在.NET中解析它。它返回true,如何为给定的字符串获取false?

我有以下字符串"12-5“,我试图使用TryParse在.NET中解析它。它返回true,如何为给定的字符串获取false?
EN

Stack Overflow用户
提问于 2020-03-02 11:49:42
回答 2查看 113关注 0票数 0

当将"12-5""12,5"作为.NET中DateTime.TryParse的输入时,将其转换为"12-05-2020",返回值为true。"12-5“如何等于"12-05-2020"?在我的例子中,输入字符串是用户的出生日期,根据要求它是一个免费文本,解析的值"12-05-2020“没有任何意义,因为出生日期不能是未来的日期。是否有一种方法可以不使用DateTime.Parse或DateTime.ParseExact来纠正这种情况,因为它们可能会引发异常。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-02 12:12:12

那么,您需要执行2测试:

  1. 用于有效日期语法(例如,bla-bla-bla不是bla-bla-bla),
  2. 用于有效日期值(例如,25-03-2123不是

)

让我们在一个if中检查这些需求

代码语言:javascript
复制
   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
   } 
票数 1
EN

Stack Overflow用户

发布于 2020-03-02 12:05:33

正如@Rafalon建议的那样,使用DateTime.TryParseExact来避免异常并设置所需的格式。

代码语言:javascript
复制
string dateformat = "12-05";
bool answer = DateTime.TryParseExact(dateformat, "dd-MM-yyyy", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out DateTime result);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60488257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档