2011-11-24 188 views

Respuesta

1

El truco es usar java.util.Date y java.text.DateFormat para obtener el formato que desee. Puede buscar cómo hacerlo en tutorials on the Web.

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

Aquí javadoc es una descripción. El constructor necesita milisegundos.

Para mostrar esta fecha en formato adecuado debe comprobar DataFormat

Aquí es un poco de ejemplo:

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

En caso de que esté restringido a java.util.Date legado y java.util.Calendar API, es necesario tener en cuenta que las marcas de tiempo se interpretan en milisegundos, no en segundos. Por lo tanto, primero debe multiplicarlo por 1000 para obtener la marca de tiempo en milisegundos.

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

De esta forma puede alimentarlo a a.o. el constructor de java.util.Date y finalmente usa SimpleDateFormat para convertir un java.util.Date en java.lang.String en el patrón de formato de fecha deseado, si es necesario con un huso horario predefinido (de lo contrario usaría el sistema default time zone, 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 una LocalDateTime#ofEpochSecond() que le permite alimentar segundos época directamente sin la necesidad de multiplicar en sabor 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 
+0

Por favor, elabore en detalle el resultado que obtuvo y el resultado que esperaba. No puedo comunicarme directamente con usted para ver el problema con mis propios ojos. Al menos puedo decir que el código publicado funciona bien para mí y que obtuve el resultado como se muestra en el comentario de la última línea. – BalusC

+0

En realidad cometí un error al publicar la pregunta con claridad. Estoy trabajando con horarios de chicago en los Estados Unidos. Y mis segundos son 1320105600. El resultado correcto para esta pregunta es el martes, noviembre de 2011 a las 7:00 a.m. pero el lunes 31 de octubre , 2011 7: 00, PM usando el código anterior. – androiduser

+0

Entiendo que hay una diferencia de zona horaria, pero ¿12 horas? – BalusC

2
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)); 
2

java.time

El Answer by BalusC es buena en que se señala que el uso de java.time. Pero esa respuesta usa LocalDateTime donde Instant es más apropiado. Un LocalDateTime es no un momento en la línea de tiempo, ya que a propósito no tiene ningún concepto de offset-from-UTC o time zone.

java.time

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

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

Gran parte de la java.la funcionalidad de tiempo se back-ported a Java 6 & 7 en ThreeTen-Backport y adaptada 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. El Z en el extremo, abreviatura de 'Zulu', significa UTC.

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

instantánea: 2011-11-01T00: 00: 00Z

ZonedDateTime

En sus comentarios usted menciona que quieran ver esta fecha-hora a través de la lente de las veces America/Chicago zona. Use un proper time zone name. Aplique una zona horaria, ZoneId, para obtener un objeto ZonedDateTime. Vemos que Chicago está cinco horas atrá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]

Cuerdas

las cuerdas visto anteriormente son 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 ubique 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 por, 31 de de octubre de, 2011 7:00:00 PM CDT

Para especificar su propio formato personalizado, buscar desbordamiento de pila durante muchos ejemplos y más discusión.

Cuestiones relacionadas