Eu preciso converter um timestamp unix em um objeto de data.
Eu tentei isso:
java.util.Date time = new java.util.Date(timeStamp);
O valor do carimbo de data / hora é: 1280512800
A data deve ser "30/07/2010 - 22:30:00" (como eu entendo pelo PHP), mas, em vez disso, entendo Thu Jan 15 23:11:56 IRST 1970
.
Como isso deve ser feito?
java.util.Date
agora são herdadas , substituídas pelas classes java.time . Consulte o Tutorial da Oracle .Respostas:
Para
1280512800
, multiplique por 1000, desde java está esperando milissegundos:Se você já tinha milissegundos, basta
new java.util.Date((long)timeStamp);
A partir da documentação :
fonte
(long)
é muito importante: sem ela, o número inteiro excede.java.util.Date
é o nome completo da classe.Date
provavelmente é exatamente a mesma coisa, desde que você importe ojava.util
pacote em sua classe.Date time = new Date(TimeUnit.MILLISECONDS.convert(unixTimestamp, TimeUnit.SECONDS));
java.util.Date
agora são herdadas , substituídas pelas classes java.time . Consulte o Tutorial da Oracle .java.time
Java 8 introduziu uma nova API para trabalhar com datas e horas: o pacote java.time .
Com java.time, você pode analisar sua contagem de segundos inteiros desde a referência da época do primeiro momento de 1970 no UTC, 1970-01-01T00: 00Z. O resultado é um
Instant
.Se você precisar
java.util.Date
interoperar com o código antigo ainda não atualizado para java.time , converta. Chame novos métodos de conversão adicionados às classes antigas.fonte
java.util.Date
. As classes antigas são legadas e devem ser evitadas. Embora você possa realmente converter de / para as classes legacy e java.time, é melhor ficar com java.time sempre que possível.Este é o caminho certo:
fonte
Parece que o Google Agenda é o novo caminho:
A última linha é apenas um exemplo de como usá-la, esta imprimiria, por exemplo, "14.06.2012".
Se você usou System.currentTimeMillis () para salvar o carimbo de data / hora, não precisa da parte "* 1000".
Se você tiver o registro de data e hora em uma sequência, precisará analisá-lo primeiro como um longo: Long.parseLong (registro de data e hora).
https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html
fonte
timestamp
for um número inteiro, você precisará convertê-lo(long)
primeiro, caso contrário, você terminará com datas incorretas.mydate.setTimeInMillis((long) timestamp*1000);
java.util.Date
,java.util.Calendar
ejava.text.SimpleDateFormat
estão agora legado , suplantado pelos java.time classes internas em Java 8 e posterior. Consulte o Tutorial da Oracle .tl; dr
java.time
A nova estrutura java.time incorporada no Java 8 e posterior é a sucessora do Joda-Time.
Essas novas classes incluem um método prático de fábrica para converter uma contagem de segundos inteiros da época. Você recebe
Instant
um momento na linha do tempo no UTC com resolução de até nanossegundos.Veja esse código executado ao vivo em IdeOne.com .
Asia/Kabul
ouAsia/Tehran
fusos horários?Você relatou obter um valor da hora do dia de 22:30 em vez das 18:00 vistas aqui. Suspeito que o seu utilitário PHP esteja implicitamente aplicando um fuso horário padrão para ajustar a partir do UTC. Meu valor aqui é UTC, representado pelo
Z
(abreviado paraZulu
, significa UTC). Alguma chance de seu sistema operacional ou PHP da máquina estar definido comoAsia/Kabul
ouAsia/Tehran
fusos horários? Suponho que sim, como você relataIRST
em sua produção, o que aparentemente significa tempo no Irã. Atualmente, em 2017, essas são as únicas zonas operam com um horário de verão quatro horas e meia antes do UTC.Especifique um nome próprio fuso horário no formato
continent/region
, comoAmerica/Montreal
,Africa/Casablanca
, ouPacific/Auckland
. Nunca use a abreviação de 3-4 letras, comoEST
ouIST
ouIRST
como elas não são zonas verdadeiros tempo, não padronizados, e nem mesmo única (!).Se você quiser ver seu momento pelas lentes do fuso horário de uma região específica, aplique a
ZoneId
para obter aZonedDateTime
. Ainda é o mesmo momento simultâneo, mas visto como uma hora diferente do relógio de parede .Convertendo de java.time para classes herdadas
Você deve ficar com as novas classes java.time. Mas você pode converter para antigo, se necessário.
Joda-Time
ATUALIZAÇÃO: O projeto Joda-Time agora está no modo de manutenção , com a equipe aconselhando a migração para o java.time classes .
Para sua informação, o construtor de um Joda-Time DateTime é semelhante: multiplique por mil para produzir um
long
(não umint
!).É melhor evitar as classes java.util.Date e .Calendar notoriamente problemáticas. Mas se você precisar usar uma Data, poderá converter do Joda-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 as classes java.time .
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
O construtor da data espera que o valor timeStamp esteja em milissegundos. Multiplique o valor do seu registro de data e hora com 1000, depois passe para o construtor.
fonte
Se você estiver convertendo um valor de carimbo de data / hora em uma máquina diferente, verifique também o fuso horário dessa máquina. Por exemplo;
As descrições acima resultarão em valores diferentes de data, se você executar com fusos horários EST ou UTC.
Para definir o fuso horário; também conhecido como UTC, você pode simplesmente reescrever;
fonte
For kotlin
fonte
Às vezes você precisa trabalhar com ajustes.
Não use elenco por muito tempo! Use nanoadjustment.
Por exemplo, usando a API Oanda Java para negociação, você pode obter data e hora no formato UNIX.
Por exemplo: 1592523410.590566943
você obtém:
Além disso, use:
fonte
fonte