Solución:
Puedes utilizar java.util.Date
class y luego usar SimpleDateFormat
para formatear el Date
.
Date date=new Date(millis);
Podemos usar el paquete java.time (tutorial): API de DateTime introducidas en Java SE 8.
var instance = java.time.Instant.ofEpochMilli(millis);
var localDateTime = java.time.LocalDateTime
.ofInstant(instance, java.time.ZoneId.of("Asia/Kolkata"));
var zonedDateTime = java.time.ZonedDateTime
.ofInstant(instance,java.time.ZoneId.of("Asia/Kolkata"));
// Format the date
var formatter = java.time.format.DateTimeFormatter.ofPattern("u-M-d hh:mm:ss a O");
var string = zonedDateTime.format(formatter);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timeStamp);
int mYear = calendar.get(Calendar.YEAR);
int mMonth = calendar.get(Calendar.MONTH);
int mDay = calendar.get(Calendar.DAY_OF_MONTH);
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.
Detalles
Las otras respuestas usan clases anticuadas o incorrectas.
Evite las antiguas clases de fecha y hora como java.util.Date/.Calendar. Han demostrado estar mal diseñados, confusos y problemáticos.
java.time
El marco java.time viene integrado en Java 8 y versiones posteriores. Gran parte de la funcionalidad se ha actualizado a Java 6 y 7 y se ha adaptado aún más a Android. Hecho por algunas de las mismas personas que habían hecho Joda-Time.
Un Instant
es un momento en la línea de tiempo en UTC con una resolución de nanosegundos. Su época es el primer momento de 1970 en UTC.
Suponiendo que sus datos de entrada son un recuento de milisegundos desde 1970-01-01T00: 00: 00Z (no está claro en la Pregunta), entonces podemos instanciar fácilmente un Instant
.
Instant instant = Instant.ofEpochMilli( 1_322_018_752_992L );
instant.toString (): 2011-11-23T03: 25: 52.992Z
los Z
en esa cadena formateada estándar ISO 8601 es la abreviatura de Zulu
y significa UTC.
Aplicar una zona horaria con un nombre de zona horaria adecuado, para obtener una ZonedDateTime
.
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = instant.atZone( zoneId );
Vea este código en vivo en IdeOne.com.
Asia/Kolkata
zona horaria ?
Supongo que tiene una zona horaria de India que afecta su código. Vemos aquí que ajustarse a Asia/Kolkata
La zona horaria muestra la misma hora del día que informa, 08:55
que es cinco horas y media por delante de nuestro valor UTC 03:25
.
2011-11-23T08: 55: 52.992 + 05: 30[Asia/Kolkata]
Zona predeterminada
Puede aplicar la zona horaria predeterminada actual de la JVM. Tenga en cuenta que el valor predeterminado puede cambiar en cualquier momento durante el tiempo de ejecución. Cualquier código en cualquier hilo de cualquier aplicación dentro de la JVM puede cambiar el valor predeterminado actual. Si es importante, pregúntele al usuario cuál es la zona horaria deseada o esperada.
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Sobre java.time
los java.time framework está integrado en Java 8 y versiones posteriores. Estas clases suplantan las antiguas y problemáticas clases de fecha y hora heredadas, como java.util.Date
, Calendar
Y SimpleDateFormat
.
los Joda-Time proyecto, ahora en modo de mantenimiento, aconseja la migración a las clases java.time.
Para obtener más información, consulte el Tutorial de Oracle. Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310.
Con un controlador JDBC que cumpla con JDBC 4.2 o posterior, puede intercambiar java.time objetos directamente con su base de datos. No se necesitan cadenas ni clases java.sql. *.
¿Dónde obtener las clases java.time?
-
Java SE 8, Java SE 9, y después
- Incorporado.
- Parte de la API estándar de Java con una implementación integrada.
- Java 9 agrega algunas características y correcciones menores.
-
Java SE 6 y Java SE 7
- Gran parte de la funcionalidad de java.time está retroportada a Java 6 y 7 en ThreeTen-Backport.
-
Androide
- Versiones posteriores de implementaciones de paquetes de Android de las clases java.time.
- Para Android anterior, el ThreeTenABP el proyecto se adapta ThreeTen-Backport (mencionado anteriormente). Ver Cómo usar ThreeTenABP….
los ThreeTen-Extra el proyecto extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval
, YearWeek
, YearQuarter
, y más.