应用中需要将字符串按照指定的格式转换成DateTime类型。DateTime.ParseExact(tokens[0], "dd\\/MM\\/yyyy,HH:mm:ss", null);  // 或类似的方法;
可以完成数据转换的功能,但是,当给出的字串以该格式转换时,如果数据无效,例如日期和月份数据无效时,则程序会触发异常。我想先检验该字串按指定格式转换成DateTime类型的有效性,然后再做转换(无效则不转换)。
如何使用正则表达式的方式对该日期字串的有效性进行检验?(或有更好的方法也提供?)

解决方案 »

  1.   

    js脚本:
    function IsdateJ(value){
    var re = /^(\d{4})(\/|-)(\d{1,2})\2(\d{1,2})$/;
    var m = re.exec(value);
    if (m == null) return false;
    var d = new Date(m[1],m[3]-1,m[4]);
    return d.getFullYear()==m[1] && d.getMonth()==(m[3]-1) && d.getDate()==m[4];
    }
    aspx页面调用:
    if(!(IsdateJ(window.Form1.TextDate.value)))
    {
    window.alert("[日期]必须为合法的时间,格式为2008-01-01");
    window.Form1.TextDate.focus();
    return false;
    }
      

  2.   

    我是用C#;在windows中编程
    并且数据是日期+时间的DateTime;
    字串如"23/12/2008,12:32:59"  // 格式为日/月/年,时:分:秒
      

  3.   

    字串如"23/12/2008,12:32:59"  // 格式为日/月/年,时:分:秒
    ========
    这种格式是英式日期
    string dtSource = "23/12/2008,12:32:59";
            DateTime dtResult;
            bool success = DateTime.TryParse(dtSource, System.Globalization.CultureInfo.GetCultureInfo("en-GB"), System.Globalization.DateTimeStyles.None, out dtSource);
            if (!success)
            {
                throw new Exception("Bad format DateTime.");
            }
      

  4.   

    可以用正则表达式,最灵活 
    winform也可以用.表达式可以参考2楼的
      

  5.   

    DateTime.TryParse
    如果你的时间格式不是标准的,可以自己实现IFormatProvider
      

  6.   

    bool DateTime.TryParse(string s,out DateTime result)
    TryParse 方法类似于 Parse 方法,不同的是此方法在转换失败时不引发异常。使用针对当前区域性初始化的 DateTimeFormatInfo 对象中的格式设置信息来分析字符串 s。此方法会试图忽略无法识别的数据并完全分析 s。如有可能,它将忽略未被识别的数据,并用当前时间填充缺少的年月日信息。如果 s 只包含日期而没有时间,则此方法假设时间为午夜 12:00。s 中的所有前导、内部或尾随的空白字符均会被忽略。日期和时间可以用前导和尾随数字标记字符对 ('#', U+0023) 括起来,还可以尾随一个或多个 NULL 字符 (U+0000)。s 参数中所包含的日期和时间必须以 DateTimeFormatInfo 类中描述的格式之一来表示。