C# 比较字符串包含所有数字和比较日期

C# 比较字符串包含所有数字和比较日期,c#,.net,C#,.net,我有一个格式为“YYYYMMDD\u NNN”的字符串值。除\外,所有都是整数。我必须验证这个字符串值 验证所有是否为整数,除非_ 日期值不应大于今天的日期 格式应该相同,前8个是数字,后3个是数字 这是我写的。有没有更好的方法来改进它或简化版本 string strDate = _htfdate.Substring(0, 8); if (int.TryParse(strHtfDate, out _)) { //ok, do something DateTime dt1;

我有一个格式为“YYYYMMDD\u NNN”的字符串值。除\外,所有都是整数。我必须验证这个字符串值

  • 验证所有是否为整数,除非_

  • 日期值不应大于今天的日期

  • 格式应该相同,前8个是数字,后3个是数字

  • 这是我写的。有没有更好的方法来改进它或简化版本

    string strDate = _htfdate.Substring(0, 8);
    
    if (int.TryParse(strHtfDate, out _))
    {
        //ok, do something
        DateTime dt1;
    
        if(DateTime.TryParse(strHtfDate, out dt1))
        {
            if (dt1 > DateTime.Today)
                //do something
        }
    }
    else
    {
        //not an int
    }
    

    我没有在这里编写验证最后3个字符的代码

    您可以简单地尝试一下:看起来最后三个与日期无关,但如果它们是百分之一秒,解析仍然可以发生

    string datestring = "20190519_562";
     //check first 8 characters are digit
    var rsult = datestring.Take(8).All(char.IsDigit);
     if(rsult == true)
     {
    // get last three characters of string 
    string dtst= datestring.Substring(datestring.Length - 4);
    if(dtst[0]== '_') // check first character is "_"
    {
     int length = dtst.Substring(1).Length; // get length of character after "_"
     if(length==3)
    {
    enter code here
     }
    
    }
     }
    
    var dateTimeString = "20181230_183";
    DateTimeOffset dto;
    if (DateTimeOffset.TryParseExact(dateTimeString, "yyyyMMdd_fff", 
                                     CultureInfo.InvariantCulture, 
                                     DateTimeStyles.AssumeUniversal |
                                     DateTimeStyles.AdjustToUniversal, out dto))
    
    {
         Console.WriteLine(dto.ToString("yyyyMMdd"));  // prints 20181230
         Console.WriteLine(dto.ToString("fff")); // prints 183
    }
    

    似乎您应该首先使用
    Regex
    例如
    var-validPattern=@“\d{8}.\d{3}”
    ,然后使用
    DateTime.TryParseExact(\u-htfdate.Substring(0,8),“yyyyyymmdd”)
    。这个Regex模式还会检查吗?是的,只需将其更改为var-validPattern=@“\d{8}\d{3}”它会的。模式有
    来表示任何字符。如果输入中的下划线是字面意思,则可以将
    替换为
    .
    。日期的最后三部分是秒还是数字