问题一:
用户输入日期格式(比如:yyyyMMdd,yyyy-MM-dd,yyyy-MM-dd HH:mm:ss等等)
我怎么验证这个格式是否正确?问题二:
用户输入具体的日期时间(比如:20100411,2010-04-11 14:39等等)
我怎么验证这个日期时间是否正确?这是两个相互独立的问题,两个没有关系!
求答案!

解决方案 »

  1.   

    这个方法,第一个都过不去,yyyyMMdd和20100411都说格式错误,可是这是正确的!
      

  2.   

    C#判断输入日期格式代码如下/// <summary>          
    /// 是否为日期型字符串          
    /// </summary>          
    /// <param name="StrSource">日期字符串(2008-05-08)</param>          
    /// <returns></returns>          
    public static bool IsDate(string StrSource)          
    {              
    return Regex.IsMatch(StrSource,@"^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]" + @"|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|" + @"1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?" +@"2-(0?[1-9]|1\d|2[0-9]))|(((1[6-9]|[2-9]\d)(0[48]|[2468]" + @"[048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$");          
    }           /// <summary>          
    /// 是否为时间型字符串          
    /// </summary>          
    /// <param name="source">时间字符串(15:00:00)</param>          
    /// <returns></returns>          
    public static bool IsTime(string StrSource)          
    {              
    return Regex.IsMatch(StrSource, @"^((20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d)$");          
    }           /// <summary>          
    /// 是否为日期+时间型字符串          
    /// </summary>          
    /// <param name="source"></param>          
    /// <returns></returns>          
    public static bool IsDateTime(string StrSource)          
    {              
    return Regex.IsMatch(StrSource, @"^(((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?" + @"[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?" + @"[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]" +@"|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-" + @"9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[" + @"2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23" +@"|[0-1]?\d):[0-5]?\d:[0-5]?\d)$ ");         
     } 
      

  3.   

    如果真的要按你说的那么做,只有把输入的字符串取出,然后把他们截取成3段,每段进行判断一下。TextBox可以限定输入的字符数
    //yyyyMMdd格式的
    string DateString = textBox1.Text.Trim();
    string YearString = DateString.Substring(0, 4);
    string MonthString = DateString.Substring(4, 2);
    string DayString = DateString.Substring(6, 2);
    然后把他们转成数字,然后判断一下大小就是了。如果年是瑞年的话,还要考虑2月有29天。 
      

  4.   

    你的正则好像不能验证yyyyMMdd这种类型!
      

  5.   

    yyyyMMdd -> [12]\d{3}(?:1[012]|[1-9])(?:[12]\d|3[10]|[1-9])[12]\d{3}             年
    (?:1[012]|[1-9])      月
    (?:[12]\d|3[10]|[1-9])日
    自己组合吧
      

  6.   

    yyyyMMdd hh:mm:ss 
    yyyyMMdd
    这两个有统一的一个正则判断出吗?
      

  7.   

    yyyyMMdd hh:mm:ss  
    yyyyMMdd
    这两个和起来统一一个正则判断式怎么写?求高手!
      

  8.   

    YYYY-MM-DD基本上把闰年和2月等的情况都考虑进去了
    ^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$ 
      

  9.   

    两个问题是一回事.private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(isDateTime("19980512").ToString());
        MessageBox.Show(isDateTime("1998-05-12").ToString());
        MessageBox.Show(isDateTime("1998-05-12 12:03:12").ToString());
    }bool isDateTime(string str)
    {
        DateTime dt;
        if (DateTime.TryParseExact(str, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AllowWhiteSpaces, out dt)) return true;
        if (DateTime.TryParseExact(str, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AllowWhiteSpaces, out dt)) return true;
        if (DateTime.TryParseExact(str, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AllowWhiteSpaces, out dt)) return true;
        // 其它格式往后加吧
        return false;
    }
      

  10.   


    yyyyMMdd hh:mm:ss   
    yyyyMMdd
    这两个和起来统一一个正则判断式怎么写?
      

  11.   

    ^[12]\d{3}(?:1[012]|[1-9])(?:[12]\d|3[10]|[1-9])( (?:1[012]|\d):(:60|[1-5]?\d):(:60|[1-5]?\d))?$
      

  12.   

    这样的功能用正则真不如用Datetime.TryParse
      

  13.   


    string d = DateTime.Now.ToString("yyyyMMdd hh:mm:ss");
    DateTime dt;
    DateTime.TryParseExact(d, "yyyyMMdd hh:mm:ss", null, System.Globalization.DateTimeStyles.None, out dt);
      

  14.   

    不用,只列出系统不能误解别的就可以了.
    private void button1_Click(object sender, EventArgs e)
    {
        MessageBox.Show(isDateTime("19980512").ToString());
        MessageBox.Show(isDateTime("1998-05-12").ToString());
        MessageBox.Show(isDateTime("1998-05-12 12:03:12").ToString());
    }bool isDateTime(string str)
    {
        DateTime dt;
        if (DateTime.TryParse(str,out dt)) return true;
        if (DateTime.TryParseExact(str, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AllowWhiteSpaces, out dt)) return true;
        // 其它格式往后加吧
        return false;
    }
      

  15.   

    系统的tryparse跟区域相关
    还是用正则吧
      

  16.   


    DateTime.TryParseExact(thisDate.Substring(0, 4), dateFrmate, System.Threading.Thread.CurrentThread.CurrentCulture, System.Globalization.DateTimeStyles.None, out tempDate)
      

  17.   

    yyyyMMdd hh:mm:ss   
    yyyyMMdd
    求这两个不规则的格式的正则表达式!
      

  18.   

    一个时间问题,发5个贴子,你是猪脑子? 不知道有MSDN?