Eason's .NET Space

只关注.NET
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C#日期验证函数

Posted on 2007-03-27 10:42  Eason  阅读(2382)  评论(0)    收藏  举报
  /// <summary>
  
/// 判断用户输入是否为日期
  
/// </summary>
  
/// <param name="strValue"></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)
  
{
   
ifnull == 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;
  }