Como faço para converter 'timeStamp' para date
depois de obter a contagem em java?
Meu código atual é o seguinte:
public class GetCurrentDateTime {
public int data() {
int count = 0;
java.sql.Timestamp timeStamp = new Timestamp(System.currentTimeMillis());
java.sql.Date date = new java.sql.Date(timeStamp.getTime());
System.out.println(date);
//count++;
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/pro", "root", "");
PreparedStatement statement = con.prepareStatement("select * from orders where status='Q' AND date=CURDATE()");
ResultSet result = statement.executeQuery();
while (result.next()) {
// Do something with the row returned.
count++; //if the first col is a count.
}
} catch (Exception exc) {
System.out.println(exc.getMessage());
}
return count;
}
}
Este é meu banco de dados:
Aqui, a saída que obtive foi 2012-08-07 0, mas a consulta equivalente retorna 3. Por que obtenho 0?
PreparedStatement
com sintaxe incorreta. Você não pode incorporar variáveis Java no texto de sua string SQL. Em vez disso, incorpore?
na string SQL e chame osset
métodos para passar valores para PreparedStatement. Veja a Resposta correta de Sujay e a Resposta de tenorsax .Respostas:
Basta fazer um novo
Date
objeto com ogetTime()
valor do carimbo como parâmetro.Aqui está um exemplo (eu uso um exemplo de carimbo de data / hora da hora atual):
fonte
fonte
Somente:
fonte
Venho procurando por isso há muito tempo, descobri que o conversor Eposh faz isso facilmente:
Ou o contrário:
fonte
tl; dr
…
…
…
java.time
Você está usando classes antigas e problemáticas que agora são legadas, suplantadas pelas classes java.time modernas .
Aparentemente, você está armazenando um momento em seu banco de dados em uma coluna de algum tipo inteiro. Isso é uma pena. Em vez disso, você deve usar uma coluna de um tipo como o padrão SQL
TIMESTAMP WITH TIME ZONE
. Mas, para esta Resposta, vamos trabalhar com o que temos.Se seus registros representam momentos com uma resolução de milissegundos e você deseja todos os registros de um dia inteiro, então precisamos de um intervalo de tempo. Devemos ter um momento de início e um momento de parada. Sua consulta tem apenas um único critério de data e hora em que deveria haver um par.
A
LocalDate
classe representa um valor apenas de data sem hora do dia e sem fuso horário.Um fuso horário é crucial para determinar uma data. Para qualquer momento, a data varia ao redor do globo por zona. Por exemplo, alguns minutos depois da meia-noite em Paris, a França é um novo dia e ainda “ontem” em Montreal Québec .
Se nenhum fuso horário for especificado, a JVM aplicará implicitamente seu fuso horário padrão atual. Esse padrão pode mudar a qualquer momento, então seus resultados podem variar. Melhor especificar o fuso horário desejado / esperado explicitamente como um argumento.
Especifique um nome próprio fuso horário no formato
continent/region
, comoAmerica/Montreal
,Africa/Casablanca
, ouPacific/Auckland
. Nunca utilize o 3-4 letras, comoEST
ouIST
como eles são não zonas verdadeiros tempo, não padronizados, e nem mesmo única (!).Se você quiser usar o fuso horário padrão atual da JVM, pergunte por ele e passe como um argumento. Se omitido, o padrão atual da JVM é aplicado implicitamente. Melhor ser explícito, pois o padrão pode ser alterado a qualquer momento durante o tempo de execução por qualquer código em qualquer encadeamento de qualquer aplicativo dentro da JVM.
Ou especifique uma data. Você pode definir o mês por um número, com a numeração normal de 1 a 12 para janeiro a dezembro.
Ou, melhor, use os
Month
objetos enum predefinidos, um para cada mês do ano. Dica: Use essesMonth
objetos em toda a sua base de código em vez de um mero número inteiro para tornar seu código mais autodocumentado, garantir valores válidos e fornecer segurança de tipo .Com um
LocalDate
em mãos, precisamos transformá-lo em um par de momentos, o início e o fim do dia. Não presuma que o dia começa às 00:00:00 hora do dia. Devido a anomalias como horário de verão (DST), o dia pode começar em outro horário, como 01:00:00. Portanto, deixe java.time determinar o primeiro momento do dia. Passamos umZoneId
argumentoLocalDate::atStartOfDay
para procurar essas anomalias. O resultado é umZonedDateTime
.Geralmente, a melhor abordagem para definir um intervalo de tempo é a abordagem Half-Open, onde o início é inclusivo, enquanto o final é exclusivo . Portanto, um dia começa com seu primeiro momento e vai até, mas não incluindo, o primeiro momento do dia seguinte.
Nossa consulta de um dia inteiro não pode usar o comando SQL
BETWEEN
. Esse comando é Fully-Closed ([]
) (tanto o início quanto o fim são inclusivos) onde quisermos Half-Open ([)
). Usamos um par de critérios>=
e<
.Sua coluna está mal nomeada. Evite qualquer uma das mil palavras reservadas por vários bancos de dados. Vamos usar
placed
neste exemplo.Seu código deve ter usado
?
espaços reservados para especificar nossos momentos.Mas temos
ZonedDateTime
objetos em mãos, enquanto seu banco de dados aparentemente está armazenando inteiros, conforme discutido acima. Se você tivesse definido sua coluna corretamente, poderíamos simplesmente passar osZonedDateTime
objetos com qualquer driver JDBC com suporte a JDBC 4.2 ou posterior.Mas, em vez disso, precisamos obter uma contagem da época em segundos inteiros. Assumirei que sua data de referência de época é o primeiro momento de 1970 em UTC. Cuidado com a possível perda de dados, pois a
ZonedDateTime
classe é capaz de resolução de nanossegundos. Qualquer segundo fracionário será truncado nas linhas a seguir.Agora estamos prontos para passar esses inteiros para nosso código SQL definido acima.
Ao recuperar seus valores inteiros do
ResultSet
, você pode transformar emInstant
objetos (sempre em UTC) ou emZonedDateTime
objetos (com um fuso horário atribuído).Sobre java.time
A estrutura java.time é integrada ao Java 8 e posterior. Essas classes suplantar os velhos problemáticos legados aulas de data e hora, como
java.util.Date
,Calendar
, eSimpleDateFormat
.O projeto Joda-Time , agora em modo de manutenção , aconselha a migração para as classes java.time .
Para saber mais, consulte o tutorial Oracle . E pesquise no Stack Overflow para muitos exemplos e explicações. A especificação é JSR 310 .
Onde obter as classes java.time?
O projeto ThreeTen-Extra estende java.time com classes adicionais. Este projeto é um campo de provas para possíveis adições futuras ao java.time. Você pode encontrar algumas classes úteis aqui, como
Interval
,YearWeek
,YearQuarter
, e mais .fonte
Em primeiro lugar, você não está aproveitando a vantagem de usar a
PreparedStatement
. Em primeiro lugar, sugiro que você modifique o seu daPreparedStatement
seguinte maneira:Você pode então usar
statement.setXX(param_index, param_value)
para definir os respectivos valores. Para conversão paratimestamp
, dê uma olhada nos seguintes javadocs:PreparedStatement.setTimeStamp ()
Timestamp
Espero que isto ajude!
fonte
No Android é muito simples. Basta usar a classe Calender para obter o currentTimeMillis.
Em Java, basta usar System.currentTimeMillis () para obter o carimbo de data / hora atual
fonte
Não tenho certeza do que você está tentando selecionar na consulta, mas lembre-se de que
UNIX_TIMESTAMP()
sem argumentos retorna a hora agora. Você provavelmente deve fornecer um tempo válido como argumento ou alterar a condição.EDITAR:
Aqui está um exemplo de uma consulta de limite de tempo com base na pergunta:
EDIT: coluna timestamp
No caso de timestamp, use
java.sql.Timestamp
e PreparedStatement.setTimestamp () , ou seja:fonte
new Date(timestamp.getTime())
deve funcionar, mas a nova maneira sofisticada do Java 8 (que pode ser mais elegante e mais segura de tipos, além de ajudar a levá-lo a usar as novas classes de tempo) é chamarDate.from(timestamp.toInstant())
.(Não confie no fato de que
Timestamp
ele mesmo é uma instância deDate
; consulte a explicação nos comentários de outra resposta .)fonte
fonte
Sinto-me obrigado a responder, pois outras respostas parecem ser agnósticas de fuso horário, o que um aplicativo do mundo real não pode ter. Para fazer a conversão de carimbo de data / hora correta quando o carimbo de data / hora e a JVM estiverem usando fusos horários diferentes, você pode usar o LocalDateTime do Joda Time (ou LocalDateTime em Java8) como este:
O exemplo a seguir assume que o carimbo de data / hora é UTC (como geralmente é o caso com bancos de dados). No caso de seus carimbos de data / hora estarem em fusos horários diferentes, altere o parâmetro de fuso horário da
toDate
instrução.fonte
tente usar este código java:
fonte
Supondo que você tenha um pré-existente
java.util.Date date
:fonte
Você pode usar este método para obter a data do carimbo de data / hora e o fuso horário de uma área específica.
fonte
fonte
fonte