Problema na gravação de data no Mysql

3 respostas
P

Olá,

digito uma data na tela e no banco grava outra data ???

Cadastro de Usuários
Nome: 	
Data Nascimento: 	25/01/1968
Celular: 	
e-Mail: 	
Idioma: 	
Login: 	
Senha: 	
Confirmar Senha:

e no banco de dados gravou assim 22-01-1968…

Por que aconteceu isso …

'1', 'Paulo Ribeiro', 'paribe', '[email removido]', 'numsey', '1968-01-22', '26517038', 'pt_BR', '1'
delimiter $$

CREATE TABLE `contato` (
  `codigo` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(50) DEFAULT NULL,
  `telefone` varchar(50) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  `dt_cad` date DEFAULT NULL,
  `obs` text,
  PRIMARY KEY (`codigo`)
) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=latin1$$
<?xml version="1.0"  ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core" 
>
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Cadastro de Usuários</title>
</h:head>
<h:body>
  <h1>Cadastro de Usuários</h1>
  <h:form id="cadastro">
     <h:messages/>
     
     <h:inputHidden value="#{usuarioBean.usuario.codigo}"/>
     <h:inputHidden value="#{usuarioBean.usuario.ativo}"/>
     <h:inputHidden value="#{usuarioBean.destinoSalvar}"/>
     
     <h:panelGrid columns="2">
     
       <h:outputLabel value="Nome:" for ="nome"/>
       <h:inputText id="nome" label="Nome" value="#{usuarioBean.usuario.nome}" size="30" maxlength="30" required="true" requiredMessage="Você não tem nome?">
       <f:validateLength minimum="10" maximum="30"/>
       </h:inputText>


       <h:outputLabel value="Data Nascimento:" for ="data"/>
       <h:inputText id="data" label="Data Nascimento" value="#{usuarioBean.usuario.nascimento}" size="10" maxlength="10" required="true" >
       <f:convertDateTime dateStyle="medium"/>
       </h:inputText>
      
       <h:outputLabel value="Celular:" for ="celular"/>
       <h:inputText id="celular" label="Celular" value="#{usuarioBean.usuario.celular}" size="10" />
       
       <h:outputLabel value="e-Mail:" for ="email"/>
       <h:panelGroup>
          <h:inputText id="email" label="e-Mail" value="#{usuarioBean.usuario.email}" size="50" maxlength="50" required="true" validatorMessage="e-mail inválido">
          <f:validateRegex pattern="[a-zA-Z0-9\-\_\..]+@[a-zA-Z0-9\-\_\.]+"/>
          </h:inputText>
       <h:message for="email"/>
       </h:panelGroup>
       
       <h:outputLabel value="Idioma:" for ="idioma"/>
       <h:selectOneMenu id="idioma" value="#{usuarioBean.usuario.idioma}">
         <f:selectItem itemValue="pt_BR" itemLabel="Português"/>
         <f:selectItem itemValue="en_US" itemLabel="English"/>
         <f:selectItem itemValue="es_ES" itemLabel="Espanhol"/>
       </h:selectOneMenu>
       
       <h:outputLabel value="Login:" for ="login"/>
       <h:inputText id="login" label="login" value="#{usuarioBean.usuario.login}" size="15" maxlength="15" required="true" validatorMessage="Login deve ter no minimo 5 e no máximo 15 caracteres e só pode ter os simbolos '.' e '_' ">
       <f:validateRegex pattern="([a-z]|[0-9]|[.][_]){5,15}"/>       
       </h:inputText>            
       
       <h:outputLabel value="Senha:" for ="senha"/>
       <h:inputSecret id="senha" label="Senha" value="#{usuarioBean.usuario.senha}" size="10" maxlength="10" required="true" redisplay="true"/>
       
       <h:outputLabel value="Confirmar Senha:" for ="confirmarsenha"/>
       <h:inputSecret id="confirmarsenha" label="confirmar Senha" value="#{usuarioBean.confirmarSenha}" size="10" maxlength="10" required="true" redisplay="true"/>
         
     </h:panelGrid> 
     <h:commandButton action="#{usuarioBean.salvar}" value="Salvar"/>
      
  </h:form>
</h:body>
</html>

3 Respostas

A

Uai, ta certo ué, o formato de data no mysql é esse mesmo, ele grava no padrão americano yyyy-MM-dd, na hora de recuperar é so utilizar um modificador que tudo fica normal.
O tipo DATE do mysql será sempre esse a não ser que mudem a padronização para nacionalidade.

P

Olá,

mais o estranho é que digitei 25-01-1968 e gravou no banco 22-01-1968

Por isso enviei essa duvida .

abs

gabriel.coelho

Cara…
Tente usar o SimpleDateFormat.

Cria uma instancia desse cara passando como parâmentro “dd/MM/yyyy”. É fatal, não tem erro.

Depois pegue essa instancia e passe a data que vc deseja.

Exemplo:

data = "25/01/2009"

SimpleDateFormat df = new SimpleDateFormat(dd/MM/yyyy);

df.format(data);

Falow.

Criado 13 de janeiro de 2011
Ultima resposta 13 de jan. de 2011
Respostas 3
Participantes 3