Saltar al contenido

¿Cómo convertir currentTimeMillis a una fecha en Java?

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, CalendarY 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *