Como posso criar um Timestamp com a data 23/09/2007?
100
Por Timestamp
, eu presumo que você queira dizer java.sql.Timestamp
. Você notará que esta classe possui um construtor que aceita um long
argumento. Você pode analisar isso usando a DateFormat
classe:
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date date = dateFormat.parse("23/09/2007");
long time = date.getTime();
new Timestamp(time);
java.util.Date
,java.util.Calendar
ejava.text.SimpleDateFormat
agora são legadas , suplantadas pelas classes java.time construídas no Java 8 e posterior. Veja o Tutorial da Oracle .Que tal isso?
fonte
O que você quer dizer com carimbo de data / hora? Se você quer dizer milissegundos desde a época do Unix:
Se você quiser um objeto java.sql.Timestamp real:
fonte
Calendar.SEPTEMBER
tl; dr
java.time
Vamos atualizar esta página mostrando o código usando a estrutura java.time construída no Java 8 e posterior.
Essas novas classes são inspiradas no Joda-Time , definido pela JSR 310 e estendido pelo projeto ThreeTen-Extra . Eles suplantam as classes data-hora notoriamente problemáticas, agrupadas com as primeiras versões do Java.
Em java.time,
Instant
é um momento na linha do tempo em UTC. AZonedDateTime
é um Instant ajustado em um fuso horário (ZoneId
).O fuso horário é crucial aqui. Uma data de
September 23, 2007
não pode ser traduzida em um momento na linha do tempo sem aplicar um fuso horário. Considere que um novo dia amanhece mais cedo em Paris do que em Montreal, onde ainda é “ontem”.Além disso, um java.sql.Timestamp representa a data e a hora do dia. Portanto, devemos injetar uma hora do dia para acompanhar a data. Presumimos que você deseja o primeiro momento do dia como a hora do dia. Observe que esta nem sempre é a hora
00:00:00.0
devido ao horário de verão e possivelmente outras anomalias.Observe que, ao contrário da classe java.util.Date antiga e ao contrário do Joda-Time, os tipos java.time têm uma resolução de nanossegundos em vez de milissegundos. Isso corresponde à resolução de java.sql.Timestamp.
Observe que o java.sql.Timestamp tem o péssimo hábito de aplicar implicitamente o fuso horário padrão atual da JVM ao valor de data e hora ao gerar uma representação de string por meio de seu
toString
método. Aqui você vê meuAmerica/Los_Angeles
fuso horário aplicado. Em contraste, as classes java.time são mais lógicas, usando formatos padrão ISO 8601 .Despeje para o console.
Quando corre.
A propósito, a partir do JDBC 4.2, você pode usar os tipos java.time diretamente. Não há necessidade
java.sql.Timestamp
.PreparedStatement.setObject
ResultSet.getObject
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 .
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 cordas, 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 provas para possíveis adições futuras ao java.time. Você pode encontrar algumas classes úteis aqui, como
Interval
,YearWeek
,YearQuarter
, e mais .fonte
Você também pode fazer o seguinte:
fonte
De acordo com a API, o construtor que aceitaria ano, mês e assim por diante foi descontinuado. Em vez disso, você deve usar o Construtor que aceita um longo. Você pode usar uma implementação de Calendário para construir a data desejada e acessar a representação de tempo como um longo, por exemplo, com o método getTimeInMillis .
fonte
Para completar, também uma solução com Joda-Time versão 2.5 e sua
DateTime
classe:fonte
DateTime
objeto. Isso significa que seus resultados irão variar em vários computadores ou configuração do sistema operacional host ou configurações de JVM. Para resultados previsíveis, passe um fuso horário para esseDateTime
construtor. Escolha o nome do fuso horário adequado para sua intenção. Por exemplo,DateTimeZone.forID( "America/Montreal" )
ouDateTimeZone.UTC
.DateTime
objeto seus milissegundos desde a época. Substitua.toDate().getTime()
por.getMillis()
.DateTimeZone.getDefault()
e passando o resultado como o argumento opcional. (A propósito, idem para aLocale.getDefault()
mesma questão sobre a ambiguidade de argumentos opcionais.)Uma resposta mais geral seria importar
java.util.Date
, então quando você precisar definir umtimestamp
igual para a data atual, simplesmente defina-o como igual anew Date()
.fonte