分享几个由字符串转换为日期类型的正则
发布时间:2020-12-14 01:35:07 所属栏目:百科 来源:网络整理
导读:一般情况下,各种语言对于DateTime?(原型NullableDateTime)类型的支持不一。导致在写接口的时候,一般会考虑将这种类型用字符串来替换,在接口处理的内部会对该类型进行一个转换,最后得到日期并执行相关的业务操作。下面附上自己在开发的时候整理的正则:
|
一般情况下,各种语言对于DateTime?(原型Nullable<DateTime>)类型的支持不一。导致在写接口的时候,一般会考虑将这种类型用字符串来替换,在接口处理的内部会对该类型进行一个转换,最后得到日期并执行相关的业务操作。下面附上自己在开发的时候整理的正则: /// <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]|1d|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_Old(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]|1d|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)$ ");
}
/// <summary>
/// 判断用户输入是否为日期
/// </summary>
/// <param ></param>
/// <returns></returns>
/// <remarks>
/// 可判断格式如下(其中-可替换为/,不影响验证)
/// YYYY | YYYY-MM | YYYY-MM-DD | YYYY-MM-DD HH:MM:SS | YYYY-MM-DD HH:MM:SS.FFF
/// </remarks>
public static bool IsDateTime(string strValue)
{
if (null == strValue)
{
return false;
}
string regexDate = @"[1-2]{1}[0-9]{3}((-|/){1}(([0]?[1-9]{1})|(1[0-2]{1}))((-|/){1}((([0]?[1-9]{1})|([1-2]{1}[0-9]{1})|(3[0-1]{1})))( (([0-1]{1}[0-9]{1})|2[0-3]{1}):([0-5]{1}[0-9]{1}):([0-5]{1}[0-9]{1})(.[0-9]{3})?)?)?)?$";
if (Regex.IsMatch(strValue,regexDate))
{
//以下各月份日期验证,保证验证的完整性
int _IndexY = -1;
int _IndexM = -1;
int _IndexD = -1;
if (-1 != (_IndexY = strValue.IndexOf("-")))
{
_IndexM = strValue.IndexOf("-",_IndexY + 1);
_IndexD = strValue.IndexOf(":");
}
else
{
_IndexY = strValue.IndexOf("/");
_IndexM = strValue.IndexOf("/",_IndexY + 1);
_IndexD = strValue.IndexOf(":");
}
//不包含日期部分,直接返回true
if (-1 == _IndexM)
return true;
if (-1 == _IndexD)
{
_IndexD = strValue.Length + 3;
}
int iYear = Convert.ToInt32(strValue.Substring(0,_IndexY));
int iMonth = Convert.ToInt32(strValue.Substring(_IndexY + 1,_IndexM - _IndexY - 1));
int iDate = Convert.ToInt32(strValue.Substring(_IndexM + 1,_IndexD - _IndexM - 4));
//判断月份日期
if ((iMonth < 8 && 1 == iMonth % 2) || (iMonth > 8 && 0 == iMonth % 2))
{
if (iDate < 32)
return true;
}
else
{
if (iMonth != 2)
{
if (iDate < 31)
return true;
}
else
{
//闰年
if ((0 == iYear % 400) || (0 == iYear % 4 && 0 < iYear % 100))
{
if (iDate < 30)
return true;
}
else
{
if (iDate < 29)
return true;
}
}
}
}
return false;
} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
