Problemas com mascaras em datas com MaskEdit?
Olah pessoal meu probelma eh o sequinte tenho alguns maskedit com mascaras feitas para data que usa o formato de quatro digitos para o ano
tipo 06/12/2006
Com tem muitos usuarios que tem o costume de digitar somente assim
06/12/06, fiz algo para converter para o padrao que fica gravado no banco de dados
Mais tem um pequeno grande problema sobre isso
se eu digitar uma data inferior ao ano da 1956 o maskedit joga para o ano 2055, 2054...
Pois ai vem o problema, estamos quase em 2007, mais em caso de data de nascimento tem alguns que sao dos anos antes de 1956, ai se um cara nasceu em 1938 por exemplo e for digitado no maskedit assim 13/05/38 em vez de aparecer 13/05/1938 vai aparecer 13/05/2038, agora quem nasceu no ano de 1956 ateh 1999 nao tem probelma algum converte a data correta cfe.o ano.
Entao vem a pergunta, tem como arrumar isso?
No agurado
Adriano
tipo 06/12/2006
Com tem muitos usuarios que tem o costume de digitar somente assim
06/12/06, fiz algo para converter para o padrao que fica gravado no banco de dados
if maskedit3.editmask = ´99/99/99´ then MaskEdit3.EditMask:=´99/99/9999´;
Mais tem um pequeno grande problema sobre isso
se eu digitar uma data inferior ao ano da 1956 o maskedit joga para o ano 2055, 2054...
Pois ai vem o problema, estamos quase em 2007, mais em caso de data de nascimento tem alguns que sao dos anos antes de 1956, ai se um cara nasceu em 1938 por exemplo e for digitado no maskedit assim 13/05/38 em vez de aparecer 13/05/1938 vai aparecer 13/05/2038, agora quem nasceu no ano de 1956 ateh 1999 nao tem probelma algum converte a data correta cfe.o ano.
Entao vem a pergunta, tem como arrumar isso?
No agurado
Adriano
Adriano_servitec
Curtidas 0
Respostas
Micheus
06/12/2006
Mais tem um pequeno grande problema sobre isso
se eu digitar uma data inferior ao ano da 1956 o maskedit joga para o ano 2055, 2054...
Esta interpretação é definida nas configurações regionais (Data - Calendário), então, sempre que digirar ano com dois dígitos em conformidade com esta configuração, este problema vai ocorrer.Dei uma adaptada em uma fração de código que utilizava em um componente para data que tratava justamente este tipo de questão. Veja se vai lhe ajudar, passando a data a ser verificada ele retorna ela corrigida conforme condição testada nos if´s:
function DataCorrigida(Data :TDateTime) :TDateTime; var Ano, Mes, Dia :Word; begin DecodeDate(Data, Ano, Mes, Dia); if Ano < 1950 then Inc(Ano, 100) else if Ano > 2050 then Dec(Ano, 100); Result := EncodeDate(Ano, Mes, Dia); end;
[]s
GOSTEI 0
Micheus
06/12/2006
Desculpe-me a falha, mas não dá para editar o post anterior, então retire o primeiro if ([i:8c0694b037]if Ano < 1950 then[/i:8c0694b037]) e ajuste a data no segundo para funcionar para seu caso.
Eu usava isto antes de 2000. :oops:
Eu usava isto antes de 2000. :oops:
GOSTEI 0
Adriano_servitec
06/12/2006
Obrigado [b:425564a3f9]Micheus[/b:425564a3f9], vou testar.
Valeu a ajuda amigo.
Valeu a ajuda amigo.
GOSTEI 0