preparadoStatement.setTimestamp (1, novo Timestamp (System.currentTimeMillis ()));
Rajat
que erro você está tendo?
Robert Columbia
Para sua informação, as classes antigas de data e hora terrivelmente problemáticas, como SimpleDateFormate java.sql.Timestampagora são herdadas , substituídas pelas classes java.time integradas no Java 8 e posterior. Consulte o Tutorial da Oracle .
Basil Bourque
Respostas:
202
Substituir
newTimestamp();
com
new java.util.Date()
porque não há construtor padrão para Timestamp, ou você pode fazê-lo com o método:
Para sua informação, as classes antigas de data e hora terrivelmente problemáticas, como java.util.Datee java.sql.Timestampagora são herdadas , substituídas pelas classes java.time integradas no Java 8 e posterior. Consulte o Tutorial da Oracle .
Basil Bourque
160
Use a java.util.Dateclasse em vez do carimbo de data e hora.
Isso me ajudou e eu fiz alguns mudou então eu não tenho que importação new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date())
Pini Cheyni
Melhor new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(new Date());
Zon
36
tl; dr
Use apenas classes java.time modernas . Nunca use os terríveis aulas legados, como SimpleDateFormat, Date, ou java.sql.Timestamp.
ZonedDateTime// Represent a moment as perceived in the wall-clock time used by the people of a particular region ( a time zone)..now(// Capture the current moment.ZoneId.of("Africa/Tunis")// Specify the time zone using proper Continent/Region name. Never use 3-4 character pseudo-zones such as PDT, EST, IST. )// Returns a `ZonedDateTime` object. .format(// Generate a `String` object containing text representing the value of our date-time object. DateTimeFormatter.ofPattern("uuuu.MM.dd.HH.mm.ss"))// Returns a `String`.
Os tipos java.sql, como java.sql.Timestamp, devem ser usados apenas para transferir dentro e fora do banco de dados. Converta imediatamente para tipos java.time no Java 8 e posterior.
java.time.Instant
Um java.sql.Timestampmapeia para a java.time.Instant, um momento na linha do tempo no UTC. Observe o novo método de conversão toInstantadicionado à classe antiga.
Use a DateTimeFormatterpara gerar sua string. Os códigos de padrão são semelhantes aos de, java.text.SimpleDateFormatmas não exatamente, portanto, leia o documento com atenção.
Esse formato específico é ambíguo quanto ao seu significado exato, pois não possui nenhuma indicação de deslocamento do UTC ou fuso horário.
ISO 8601
Se você tem alguma opinião sobre o assunto, sugiro que você considere usar os formatos padrão ISO 8601 em vez de criar seus próprios. O formato padrão é bastante semelhante ao seu. Por exemplo: 2016-02-20T03:26:32+05:30.
As classes java.time usam esses formatos padrão por padrão, portanto, não é necessário especificar um padrão. A ZonedDateTimeclasse estende o formato padrão acrescentando o nome do fuso horário (uma melhoria sábia).
Para saber mais, consulte o Tutorial do Oracle . E procure Stack Overflow para muitos exemplos e explicações. A especificação é JSR 310 .
Você pode trocar objetos java.time diretamente com seu banco de dados. Use um driver JDBC compatível com JDBC 4.2 ou posterior. Não há necessidade de strings, não há necessidade dejava.sql.* classes.
O projeto ThreeTen-Extra estende java.time com classes adicionais. Este projeto é um campo de prova para possíveis adições futuras ao java.time. Você pode encontrar algumas classes úteis aqui, como Interval, YearWeek, YearQuarter, e mais .
Então, qual é o caminho certo para obter o carimbo de data / hora atual do relógio de parede no formato "aaaa.MM.dd.HH.mm.ss"? Sem especificar explicitamente a sequência codificada do meu fuso horário local? Isso é o que arranque tópico estava pedindo, e eu não poderia encontrá-lo em sua resposta ...
t7ko
@ t7ko Adicionei uma linha de código de exemplo à seção tl; dr , mostrando como solicitar explicitamente o fuso horário padrão atual da JVM. Chamar `now () 'sem argumentos faz o mesmo, mas não está claro se você pretendia usar o padrão ou se era ignorante ou esquecido da questão crucial do fuso horário.
Basil Bourque
32
Você pode usar o java.util.Date em vez do carimbo de data / hora:
Uma abordagem mais apropriada é especificar uma região Locale como um parâmetro no construtor. O exemplo abaixo usa uma região de localidade dos EUA. A formatação da data é sensível ao código de idioma e usa o Código de Idioma para personalizar informações relativas aos costumes e convenções da Região do usuário. Código de Idioma (Java Platform SE 7)
Não existe algo como "Zona de Localização". Suspeito que você esteja confuso Localee com um fuso horário não relacionado. Localecontrola as normas culturais para formatação e a linguagem humana usada para o nome do mês / dia. O fuso horário ajusta a representação de data e hora para ser apropriada para o relógio de parede de uma região . No caso desta questão, o Locale é irrelevante, pois não há problemas de formatação com os quais aplicar normas culturais, nem nomes de mês / dia para localizar em qualquer idioma humano específico.
Basil Bourque
@BasilBourque Obrigado pela sua contribuição. Atualizei a resposta para ser mais explícita.
user3144836 23/02
4
Você pode usar o seguinte
new java.sql.Timestamp(System.currentTimeMillis()).getTime()Result:1539594988651
Espero que isso ajude. Apenas a minha sugestão e não para pontos de recompensa.
Ele não tem o formato de string solicitado. Também estou com medo que a única coisa que acrescenta um par de respostas semelhantes, é uma complicação desnecessária ...
Ole VV
4
Use java.timeclasses modernas se você usa java 8 ou mais recente.
String s =DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
A resposta de Basil Bourque é muito boa. Mas é muito longo. Muitas pessoas não teriam paciência para lê-lo. As 3 principais respostas são muito antigas e podem enganar a nova abelha do Java. Portanto, forneço esta resposta curta e moderna para os novos desenvolvedores que estão por vir. Espero que esta resposta possa reduzir o uso de coisas terríveis SimpleDateFormat.
SimpleDateFormat
ejava.sql.Timestamp
agora são herdadas , substituídas pelas classes java.time integradas no Java 8 e posterior. Consulte o Tutorial da Oracle .Respostas:
Substituir
com
porque não há construtor padrão para
Timestamp
, ou você pode fazê-lo com o método:fonte
java.util.Date
ejava.sql.Timestamp
agora são herdadas , substituídas pelas classes java.time integradas no Java 8 e posterior. Consulte o Tutorial da Oracle .Use a
java.util.Date
classe em vez do carimbo de data e hora.Isso fornecerá a data atual no formato especificado.
fonte
new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date())
new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(new Date())
;tl; dr
Use apenas classes java.time modernas . Nunca use os terríveis aulas legados, como
SimpleDateFormat
,Date
, oujava.sql.Timestamp
.Ou use o fuso horário padrão atual da JVM .
java.time e JDBC 4.2
A abordagem moderna usa o java.time classes , como visto acima.
Se o seu driver JDBC estiver em conformidade com o JDBC 4.2 , você poderá trocar diretamente objetos java.time com o banco de dados. Use
PreparedStatement::setObject
eResultSet::getObject
.Use java.sql apenas para drivers anteriores ao JDBC 4.2
Se o driver JDBC ainda não estiver em conformidade com o JDBC 4.2 para suporte ao java.time tipos , você deverá voltar a usar as classes java.sql.
Armazenando dados.
Recuperando dados.
Os tipos java.sql, como
java.sql.Timestamp
, devem ser usados apenas para transferir dentro e fora do banco de dados. Converta imediatamente para tipos java.time no Java 8 e posterior.java.time.Instant
Um
java.sql.Timestamp
mapeia para ajava.time.Instant
, um momento na linha do tempo no UTC. Observe o novo método de conversãotoInstant
adicionado à classe antiga.Fuso horário
Aplique o fuso horário desejado / esperado (
ZoneId
) para obter aZonedDateTime
.Strings formatadas
Use a
DateTimeFormatter
para gerar sua string. Os códigos de padrão são semelhantes aos de,java.text.SimpleDateFormat
mas não exatamente, portanto, leia o documento com atenção.Esse formato específico é ambíguo quanto ao seu significado exato, pois não possui nenhuma indicação de deslocamento do UTC ou fuso horário.
ISO 8601
Se você tem alguma opinião sobre o assunto, sugiro que você considere usar os formatos padrão ISO 8601 em vez de criar seus próprios. O formato padrão é bastante semelhante ao seu. Por exemplo:
2016-02-20T03:26:32+05:30
.As classes java.time usam esses formatos padrão por padrão, portanto, não é necessário especificar um padrão. A
ZonedDateTime
classe estende o formato padrão acrescentando o nome do fuso horário (uma melhoria sábia).Converta em java.sql
Você pode converter de java.time de volta para
java.sql.Timestamp
. Extraia umInstant
doZonedDateTime
.Novos métodos foram adicionados às classes antigas para facilitar a conversão de / para as classes java.time.
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 o java.time classes .
Para saber mais, consulte o Tutorial do Oracle . E procure Stack Overflow para muitos exemplos e explicações. A especificação é JSR 310 .
Você pode trocar objetos java.time diretamente com seu banco de dados. Use um driver JDBC compatível com JDBC 4.2 ou posterior. Não há necessidade de strings, não há necessidade de
java.sql.*
classes.Onde obter as classes java.time?
O projeto ThreeTen-Extra estende java.time com classes adicionais. Este projeto é um campo de prova para possíveis adições futuras ao java.time. Você pode encontrar algumas classes úteis aqui, como
Interval
,YearWeek
,YearQuarter
, e mais .fonte
Você pode usar o java.util.Date em vez do carimbo de data / hora:
fonte
Uma abordagem mais apropriada é especificar uma região Locale como um parâmetro no construtor. O exemplo abaixo usa uma região de localidade dos EUA. A formatação da data é sensível ao código de idioma e usa o Código de Idioma para personalizar informações relativas aos costumes e convenções da Região do usuário. Código de Idioma (Java Platform SE 7)
fonte
Locale
e com um fuso horário não relacionado.Locale
controla as normas culturais para formatação e a linguagem humana usada para o nome do mês / dia. O fuso horário ajusta a representação de data e hora para ser apropriada para o relógio de parede de uma região . No caso desta questão, o Locale é irrelevante, pois não há problemas de formatação com os quais aplicar normas culturais, nem nomes de mês / dia para localizar em qualquer idioma humano específico.Você pode usar o seguinte
Espero que isso ajude. Apenas a minha sugestão e não para pontos de recompensa.
fonte
Use
java.time
classes modernas se você usa java 8 ou mais recente.A resposta de Basil Bourque é muito boa. Mas é muito longo. Muitas pessoas não teriam paciência para lê-lo. As 3 principais respostas são muito antigas e podem enganar a nova abelha do Java. Portanto, forneço esta resposta curta e moderna para os novos desenvolvedores que estão por vir. Espero que esta resposta possa reduzir o uso de coisas terríveis
SimpleDateFormat
.fonte