alfinete
Power Member
Como validar uma data c#
conjunto de metodos em c# desenvolvidos por mim , excepto a exp regular
validaData() , verifica tb se ano é bisexto ou n , recebe uma string data e verifica se a mesma é valida em ralaç
ão a uma especificação, penso que esta formatada para dd-mm-aaaa, sempre a podes alterar
devolvendo true caso seja valida e false caso contrario
comparadatas(), compara se uma data é maior que outra devolvendo true caso verdade e false caso falso ....
VDatas() tb devolve true ou false caso seja verdadeiro ou falso.
esta faz tdas as verificações possiveis (pode faltar uma ou outra mas são suficientes),
Código:
#region [valida datas]
/*************Datas**********/
/*validacao de comparação entre duas datas ,
* datai - datainicial,
* dataf - datafinal,
* label - label erro da data final*/
public bool [COLOR=Orange][B]comparadatas[/B][/COLOR](DateTime datai, DateTime dataf, System.Web.UI.WebControls.Label label)
{
bool res = false;
if (dataf >= datai)
{
res = true;
label.Text = "<span class=\"erroverdade\">*</span> ";
}
else
{
res = false;
label.Text = "<span class=\"errofalso\">*</span> ";
}
return res;
}
/*Validação geral d um campo data */
/* data - string da data inserida na textbox
* dataminima - string da data minima que pode ser inserida
* label - id da labelde erro referente a um determinado campo */
public bool [B][COLOR=Orange]VDatas[/COLOR][/B](string data, string dataminima, System.Web.UI.WebControls.Label label)
{
bool resul = false;
// testa para caixa de data decisão vazia
if (data == "")
{
label.Text = "<span class=\"errofalso\">*</span> ";
resul = false;
}
// valida campo diferente de vazio
if (data != "")
{
//valida para campo com 10 caracteres e campo com tim e 10 caracteres
if ((data.Length == 10) || (data.Length == 10))// testa p numero de caracteres
{
// testa se e data valida
if (validaData(data))
{
string datamin = dataminima;
string strdatamin = datamin.Substring(6, 4) + "-" + datamin.Substring(3, 2) + "-" + datamin.Substring(0, 2);
DateTime datageral2 = Convert.ToDateTime(strdatamin);
string str = data.Substring(6, 4) + "-" + data.Substring(3, 2) + "-" + data.Substring(0, 2);
DateTime datageral = Convert.ToDateTime(str);
//testa se é menor ou igual que a data actual
if (datageral <= datageral2)
{
label.Text = "<span class=\"errofalso\">*</span>";
resul = false;
}
//testa se é maior que a data actual
if (datageral > datageral2)
{
label.Text = "<span class=\"erroverdade\">*</span>";
resul = true;
}
}
else
{
label.Text = "<span class=\"errofalso\">*</span>";
resul = false;
}
}
else
{
label.Text = "<span class=\"errofalso\">*</span>";
resul = false;
}
}
return resul;
}
//valida data no ambito da sua formatação
private bool [B][COLOR=Orange]validaData[/COLOR][/B](string str)
{
Regex Data = new Regex(@"^((((0?[1-9]|[12]\d|3[01])[\-](0?[13578]|1[02])[\-]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\-](0?[13456789]|1[012])[\-]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\-]0?2[\-]((1[6-9]|[2-9]\d)?\d{2}))|(29[\-]0?2[\-]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$");
return Data.IsMatch(str);
}
#endregion
validaData() , verifica tb se ano é bisexto ou n , recebe uma string data e verifica se a mesma é valida em ralaç
ão a uma especificação, penso que esta formatada para dd-mm-aaaa, sempre a podes alterar
devolvendo true caso seja valida e false caso contrario
comparadatas(), compara se uma data é maior que outra devolvendo true caso verdade e false caso falso ....
VDatas() tb devolve true ou false caso seja verdadeiro ou falso.
esta faz tdas as verificações possiveis (pode faltar uma ou outra mas são suficientes),
- se o campo de data vazio ou não ,
- verifica o tamanho da string da data,
- se data valida "validaData()",
- verifica se a data a tua data em relação a actual.
Última edição pelo moderador: