tl; dr
Instant.ofEpochMilli( 1_322_018_752_992L ) // Parse count of milliseconds-since-start-of-1970-UTC into an `Instant`.
.atZone( ZoneId.of( "Africa/Tunis" ) ) // Assign a time zone to the `Instant` to produce a `ZonedDateTime` object.
Detalhes
As outras respostas usam classes obsoletas ou incorretas.
Evite as classes de data e hora antigas, como java.util.Date/.Calendar. Eles provaram ser mal projetados, confusos e problemáticos.
java.time
A estrutura java.time é incorporada ao Java 8 e posterior. Grande parte da funcionalidade é suportada para Java 6 e 7 e mais adaptada para Android . Feito por algumas das mesmas pessoas que fizeram o Joda-Time .
An Instant
é um momento na linha do tempo no UTC com uma resolução de nanossegundos . Sua época é o primeiro momento de 1970 no UTC.
Assumindo que seus dados de entrada são uma contagem de milissegundos de 01-01-2009T00: 00: 00Z (não está claro na pergunta), podemos instanciar facilmente um Instant
.
Instant instant = Instant.ofEpochMilli( 1_322_018_752_992L );
Clique aqui para mais definições de Imediato
A cadeia de caracteres no formato ISO 8601Z
padrão é abreviada e significa UTCZulu
.
Aplique um fuso horário usando um nome de fuso horário adequado para obter um ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = instant.atZone( zoneId );
Veja este código executado ao vivo em IdeOne.com .
Asia/Kolkata
fuso horário ?
Suponho que o seu fuso horário na Índia esteja afetando seu código. Vemos aqui que o ajuste no Asia/Kolkata
fuso horário gera a mesma hora do dia que você informa, 08:55
cinco horas e meia antes do valor UTC 03:25
.
2011-11-23T08: 55: 52.992 + 05: 30 [Ásia / Calcutá]
Zona padrão
Você pode aplicar o fuso horário padrão atual da JVM. Cuidado: o padrão pode mudar a qualquer momento durante o tempo de execução . Qualquer código em qualquer encadeamento de qualquer aplicativo na JVM pode alterar o padrão atual. Se importante, peça ao usuário o fuso horário desejado / esperado.
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
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
, e SimpleDateFormat
.
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 .
Com um driver JDBC em conformidade com o JDBC 4.2 ou posterior, você pode trocar objetos java.time diretamente com seu banco de dados. Não há necessidade de strings ou classes java.sql. *.
Onde obter as classes java.time?
- Java SE 8 , Java SE 9 e posterior
- Construídas em.
- Parte da API Java padrão com uma implementação em pacote configurável.
- O Java 9 adiciona alguns recursos e correções menores.
- Java SE 6 e Java SE 7
- Grande parte da funcionalidade java.time é portada para Java 6 e 7 no ThreeTen-Backport .
- Android
- Versões posteriores das implementações do pacote Android das classes java.time.
- Para anteriormente Android, o ThreeTenABP projeto adapta ThreeTen-Backport (mencionados acima). Consulte Como usar o ThreeTenABP… .
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 .