variable manejo ingresar horas fecha ejemplo declarar convertir atributo java datetime-format epoch seconds

manejo - Convertir segundos de época en formato de fecha y hora en Java



localdate java ejemplo (5)

Tengo segundos desde el 1 de enero de 1970 UTC (hora de la época).

1320105600

Necesito convertir esos segundos en fecha y hora en el formato de abajo.

Friday,November 4,2011 5:00,AM

¿Cómo puedo conseguir esto?


java.time

La Respuesta por BalusC es buena porque le indica que use java.time. Pero esa respuesta usa LocalDateTime donde Instant es más apropiado. Un LocalDateTime no es un momento en la línea de tiempo, ya que a propósito no tiene ningún concepto de offset-from-UTC o zona horaria .

java.time

El marco java.time está integrado en Java 8 y java.time posteriores. Estas clases sustituyen a las antiguas clases de fecha y hora problemáticas, como java.util.Date , .Calendar , & java.text.SimpleDateFormat . El equipo de Joda-Time también aconseja la migración a java.time.

Para obtener más información, consulte el Tutorial de Oracle . Y busca para muchos ejemplos y explicaciones.

Gran parte de la funcionalidad de java.time está respaldada a Java 6 y 7 en ThreeTen-Backport y además se adapta a Android en ThreeTenABP .

Instant

Un momento en la línea de tiempo en UTC con una resolución de hasta nanoseconds está representado por la clase Instant .

Instant instant = Instant.ofEpochSecond ( 1_320_105_600L );

Volcar a la consola. Su valor de entrada es el primer momento del 1 de noviembre de 2011 en UTC . La Z en el extremo, abreviatura de ''Zulu'', significa UTC.

System.out.println ( "instant: " + instant );

Instante: 2011-11-01T00: 00: 00Z

ZonedDateTime

En sus comentarios, usted menciona querer ver esta fecha y hora a través de la lente de la zona horaria de America/Chicago . Use un nombre de zona horaria adecuado . Aplique una zona horaria, ZoneId , para obtener un objeto ZonedDateTime . Vemos que Chicago está cinco horas por detrás de UTC en esa fecha.

ZoneId zoneId = ZoneId.of ( "America/Chicago" ); ZonedDateTime zdt = instant.atZone ( zoneId );

zdt: 2011-10-31T19: 00-05: 00 [América / Chicago]

Instrumentos de cuerda

Las cuerdas que se ven arriba están en formato estándar ISO 8601 . Para generar cadenas en otros formatos, use la clase DateTimeFormatter . Puede especificar su propio patrón personalizado. Pero en general es mejor dejar que java.time se localice automáticamente en el lenguaje humano y las normas culturales codificadas en un objeto Locale .

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL ); formatter = formatter.withLocale ( Locale.US ); String output = zdt.format ( formatter );

Lunes 31 de octubre de 2011 a las 7:00:00 pm CDT

Para especificar su propio formato personalizado, busque para ver muchos ejemplos y más discusiones.


El truco es usar java.util.Date y java.text.DateFormat para obtener el formato que desee. Puedes consultar cómo hacerlo en tutoriales en la web .


En caso de que esté restringido a las API java.util.Date y java.util.Calendar heredadas, debe tener en cuenta que las marcas de tiempo se interpretan en milisegundos, no en segundos. Así que primero necesitas multiplicarlo por 1000 para obtener la marca de tiempo en milisegundos.

long seconds = 1320105600; long millis = seconds * 1000;

De esta manera, puede alimentarlo al constructor de java.util.Date y finalmente usar SimpleDateFormat para convertir un java.util.Date a java.lang.String en el patrón de formato de fecha deseado, si es necesario con una zona horaria predefinida (de lo contrario usaría la zona horaria predeterminada del sistema, que no es GMT / UTC per se y, por lo tanto, el tiempo formateado podría estar apagado).

Date date = new Date(millis); SimpleDateFormat sdf = new SimpleDateFormat("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); String formattedDate = sdf.format(date); System.out.println(formattedDate); // Tuesday,November 1,2011 12:00,AM

En caso de que ya esté en Java8, hay un LocalDateTime#ofEpochSecond() que le permite alimentar épocas segundos directamente sin la necesidad de multiplicar en milisegundos.

LocalDateTime dateTime = LocalDateTime.ofEpochSecond(seconds, 0, ZoneOffset.UTC); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE,MMMM d,yyyy h:mm,a", Locale.ENGLISH); String formattedDate = dateTime.format(formatter); System.out.println(formattedDate); // Tuesday,November 1,2011 12:00,AM


int seconds = 1320105600; Date date = new Date(seconds * 1000); SimpleDateFormat sdf = new SimpleDateFormat("EEEE,MMMM d,yyyy h:mm,a"); System.out.println(sdf.format(date));


long yourSeconds = 1320105600L; Date d = new Date(yourSeconds * 1000);

Ver este javadoc para más información. El constructor necesita milisegundos.

Para mostrar esta fecha en un formato apropiado, debe verificar el formato de DateFormat

Aquí hay un ejemplo:

DateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm:ss zzz"); System.out.println(df.format(date));