应用中需要将字符串按照指定的格式转换成DateTime类型。DateTime.ParseExact(tokens[0], "dd\\/MM\\/yyyy,HH:mm:ss", null); // 或类似的方法;
可以完成数据转换的功能,但是,当给出的字串以该格式转换时,如果数据无效,例如日期和月份数据无效时,则程序会触发异常。我想先检验该字串按指定格式转换成DateTime类型的有效性,然后再做转换(无效则不转换)。
如何使用正则表达式的方式对该日期字串的有效性进行检验?(或有更好的方法也提供?)
可以完成数据转换的功能,但是,当给出的字串以该格式转换时,如果数据无效,例如日期和月份数据无效时,则程序会触发异常。我想先检验该字串按指定格式转换成DateTime类型的有效性,然后再做转换(无效则不转换)。
如何使用正则表达式的方式对该日期字串的有效性进行检验?(或有更好的方法也提供?)
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;
}
并且数据是日期+时间的DateTime;
字串如"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.");
}
winform也可以用.表达式可以参考2楼的
如果你的时间格式不是标准的,可以自己实现IFormatProvider
TryParse 方法类似于 Parse 方法,不同的是此方法在转换失败时不引发异常。使用针对当前区域性初始化的 DateTimeFormatInfo 对象中的格式设置信息来分析字符串 s。此方法会试图忽略无法识别的数据并完全分析 s。如有可能,它将忽略未被识别的数据,并用当前时间填充缺少的年月日信息。如果 s 只包含日期而没有时间,则此方法假设时间为午夜 12:00。s 中的所有前导、内部或尾随的空白字符均会被忽略。日期和时间可以用前导和尾随数字标记字符对 ('#', U+0023) 括起来,还可以尾随一个或多个 NULL 字符 (U+0000)。s 参数中所包含的日期和时间必须以 DateTimeFormatInfo 类中描述的格式之一来表示。