Problema com datas!

18 respostas
A

Estou com alguns problemas com datas, mas como são muitos vou começar pelo primeiro:

Na minha página JSP faço a seguinte formatação de data:

SimpleDateFormat formatar = new SimpleDateFormat("dd/MM/yyyy ");

Aí para teste, joguei a seguinte data:

Date dataRecepcaoConv= new Date("13/01/2007"); out.println("<script>alert('"+formatar.format(dataRecepcaoConv)+"')</script>");
Mas ele exibe a seguinte data:

“01/01/2008”

Onde está a falha??

18 Respostas

celso.martins

Muito doido. Por que de String para Date e depois para String novamente?
Vai fazer alguma operação no meio do caminho?

Bem tenta isso. Está como app stand-alone no Eclipse. Adapta para a tua JSP:

SimpleDateFormat formatar = new SimpleDateFormat("dd/MM/yyyy");
try {
  Date dataRecepcaoConv = formatar.parse("13/01/2007");
  System.out.println(formatar.format(dataRecepcaoConv));
} catch (java.text.ParseException e) {
  e.printStackTrace();
}

Abraços

rodrigoallemand

Acho que não existe esse construtor de Data(String)…
Procure na documentação (API Java) para os contrutores de Data.
Mas te aconselho a utilização de Calendar, pois a java.util.Date tem muitos metos marcados como deprecated…

celso.martins

rodrigoallemand:
Acho que não existe esse construtor de Data(String)…
Procure na documentação (API Java) para os contrutores de Data.
Mas te aconselho a utilização de Calendar, pois a java.util.Date tem muitos metos marcados como deprecated…

Assino embaixo!

A

Tentei usar o formatar.parse aqui e ele está dando o erro “Unparseable date”.

celso.martins

Veja se não é o espaço que está depois da sua máscara de formatação.

SimpleDateFormat formatar = new SimpleDateFormat("dd/MM/yyyy ");

troque por isso

SimpleDateFormat formatar = new SimpleDateFormat("dd/MM/yyyy");
A

Ops!!! :oops:

Agora vem a segunda parte da dúvida. No banco eu tenho um campo Timestamp. Um exemplo de data que eu tenho lá é “08/07/07 19:06:09,000000”. Tenho 2 combobox que mostram 2 valores e eu escolho 2 datas para montar um intervalo. Eu tô pegando como string e mudando o formato para date e vou jogar em um select com between para realizar a consulta. Como tem que ser minha máscara para poder a data ficar como está aí em cima???

rodrigoallemand

O pattern de formatação (esse dd/MM/yyyy) deve estar no mesmo padrão da string contendo a data a ser parseada…

SimpleDateFormat

A

Valeu! Era isso mesmo que queria saber. O que vai na hora, no segundos etc. Vou testar aqui.

rodrigoallemand

AndersonDutra:
Ops!!! :oops:

Agora vem a segunda parte da dúvida. No banco eu tenho um campo Timestamp. Um exemplo de data que eu tenho lá é “08/07/07 19:06:09,000000”. Tenho 2 combobox que mostram 2 valores e eu escolho 2 datas para montar um intervalo. Eu tô pegando como string e mudando o formato para date e vou jogar em um select com between para realizar a consulta. Como tem que ser minha máscara para poder a data ficar como está aí em cima???

Vc pode setar as datas de várias maneiras… a mais simples é:
Vc pegar a data inicio como string, montar um calendário para ela (vide classe Calendar), setar a hora, o minuto e o segundo para o inicio do dia (00:00:00) e depois montar o mesmo para a data fim, só que colocando a hora para 23:59:59…

Qual o modelo de consulta vc está usando? Hibernate ou JDBC?!?

A

Estou usando JDBC.

Teste aqui e joguei na máscara o seguinte formato:

(“dd/MM/yy HH:mm:ss, 000000”)

Mandei ele imprimir e ficou igual ao do banco, mas quando eu jogo ele no select ele dá o seguinte erro:

“Foi localizado um caracter não numérico onde se esperava um numérico”

O que pode ser??

rodrigoallemand

Pode ser o “,000000”…
Esqueça os milisegundos, se isso não for realmente necessário nessa consulta…
Vc pode transformar o seu timestamp somente até os segundos…

A

Vou ver aqui no banco para tirar esse “,000000”. Daqui a pouco coloco a resposta aqui.

rodrigoallemand

Calmae!!!
Vc não precisa tirar o “,000” do banco não… apenas ignore esses valores no pattern a ser utilizado…

Ei!?!?!?
Não!!!
Não execute esse delete * from tabela não!!! Volta aqui!!! auhauhauhauihauh

R
Amigo,eu  tentei com o SimpleDateFormat,mas me retorna erro. esse codigo que voce me indicou como eu usaria junto ao meu?
<%@ page import="java.util.*" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.text.DateFormat"%>
<%@ page import="java.sql.Date.*"%>


<html>
<head>


<%
Connection con = null;
Statement st = null;
ResultSet res = null;
String matr;
Date admissao = request.getParameter("ADMISSAO");
String formato = "dd-MM-yyyy";
SimpleDateFormat formatter = new SimpleDateFormat(formato);
%>







<tr><td><hr></td></tr>

                Consulta f&eacute;rias por matr&iacute;cula.

<table border="0" cellpadding="0" cellspacing="0" width="100%">
        <tbody>
            <tr><td>&nbsp;</td></tr>
        </tbody>
</table>


<table nosave="" cellspacing="2" cols="7">
        <tbody>

          <tr bgcolor="#e6e6e6">
<td nosave=""><font face="Arial, Helvetica, sans-serif" size="2">
                <b>Matr&iacute;cula</b></font></td>
              
<td><font face="Arial, Helvetica, sans-serif" size="2">
                 <b>Data de admiss&atilde;o</b></font></td>
        </tr>

<%

try
{    Class.forName("org.gjt.mm.mysql.Driver");
     con = DriverManager.getConnection
     ("jdbc:mysql://localhost/ferias","rusther","rust");
     st = con.createStatement();
      String query = "select MATRICULA,ADMISSAO from FERIAS ";
     res = st.executeQuery (query);

     while ( res.next() )
     {    matr=res.getString("MATRICULA");
          admissao=formatter.format(res.getDate("ADMISSAO"));


%>





        <tr>
<td nowrap="nowrap"><a href="alteracao.jsp?MATRICULA=<%=matr%>&ADMISSAO=<%=admissao%>";> 
<td nowrap="nowrap"><font face="Arial, Helvetica, sans-serif" size="2"><%=matr%></font></td>
<td nowrap="nowrap"><font face="Arial, Helvetica, sans-serif" size="2"><%=admissao%></font></td>
	</tr>

<%
     }
     con.close();
}
catch (ClassNotFoundException cnfex)
{    out.println("Nao carregou o Driver!");
}

catch (SQLException sqlex)
{    out.println("Nao conectou ao banco!");
}
%>


</table>
   </tbody>
</table>
</body>
</html>

Abraços

A

Blz!! Não alterei nada no banco não. Estou fazendo um teste aqui e daqui a pouco coloco o resultado.

rodrigoallemand

:roll:Abrindo a conexão na view??? humm… deixa pra lá… :roll:

Poste o erro pra eu ver o que aconteceu…

A

É o seguinte. Criei um código em java que pega a minha instrução sql que tá na página e escreve em um arquivo de texto. Fiz isso por que como dá erro, ele não exibe um out.print que eu coloquei para exibir ela em um alert. Aí vai a linha que está no código e como ela fica depois de rodar a página:

Código

PreparedStatement stmt2 = conexao.prepareStatement(SELECT * FROM pontos1 where transmissao='"+tipo+"' and data_hora between '"+formatar.format(dataRecepcaoConv)+"' and '"+formatar.format(dataRecepcao1Conv)+"'); ResultSet rs=stmt2.executeQuery();
Como fica:
SELECT * FROM pontos1 where transmissao=‘receptor’ and data_hora between ‘08/07/07 19:06:09,000000’ and ‘08/07/07 19:40:40,000000’

Se eu jogar essa linha no banco ele dá certo, mas quando ela executa pelo JSP não vai.

A

Está ocorrendo o seguinte erro agora:

Sabe me dizer o que é??

Criado 9 de novembro de 2007
Ultima resposta 12 de nov. de 2007
Respostas 18
Participantes 4