2012-03-17 33 views
16

He visto esta pregunta varias veces y ninguna de las respuestas parece ser lo que necesito.Conversión de la cadena de fecha y hora de la fecha a la fecha

Tengo una variable de tipo larga que tiene un tiempo de época almacenado en ella.

Lo que quiero hacer es convertirlo en una cadena

por ejemplo, si se almacena el tiempo época era para hoy la cadena final sería el siguiente:

17/03/2012

Cómo sería yo a esto?

Respuesta

26

Mira en SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
sdf.format(new Date(myTimeAsLong)); 
+0

Tengo que imprimir una cadena en el formato correcto pero imprime la fecha incorrecta que da la fecha de hoy como 16/1/1970. The Long utilizado fue 1332026487. – nexus490

+0

Es porque es posible que tenga que jugar con el parámetro que pasa en el constructor. Puede encontrar todas las posibilidades de visualización en la API de Jav – Reinard

+4

. Esta respuesta: está imprimiendo el * minuto * en lugar de * mes *; ignora la elección de la cultura (que es muy importante); ignora la elección de la zona horaria (que es increíblemente importante). Realmente tienes que pensar sobre estas cosas, no es de ayuda (IMO) ignorarlas. –

20

Se podría crear un Date del long - eso es fácil:

Date date = new Date(epochTime); 

Tenga en cuenta que epochTime aquí debería estar en milisegundos desde el tiempo - si tienes segundos desde la época, se multiplican por 1000.

Luego crearía un SimpleDateFormat especificando el patrón, la cultura y la zona horaria correspondientes. Por ejemplo:

SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy", Locale.US); 
format.setTimeZone(...); 

luego usar ese dar formato a la fecha en una cadena:

String text = format.format(date); 
+0

¿Qué pondría para el argumento de la zona horaria? – nexus490

+0

@ nexus490: ¿En qué zona horaria quieres representar el valor? Por ejemplo, en una hora será 18/03/2012 en * mi * zona horaria, pero en EE. UU. Seguirá siendo 17/03/2012, durante la misma cantidad de milisegundos desde la época. ¿Cuál sería la respuesta correcta? Eso es algo que * usted * ya sabe, ya que conoce los requisitos de su solicitud (con suerte). Tal vez quieras UTC. Tal vez quieras la zona horaria local del sistema. Tal vez quieras la zona horaria local del usuario. –

+0

Gracias por insistir en esto: "si tienes ** segundos ** desde la época, multiplica por ** 1000 **". – Metallica

0

Es necesario tener en cuenta que el tiempo época en java es en milisegundos, mientras que lo que está convirtiendo puede estar en segundos. Asegúrese de que ambos lados de las conversiones estén en milisegundos, y luego puede recuperar los parámetros de fecha desde el objeto Date.

+0

¿Y por qué convertiría milisegundos en milisegundos? –

+0

mi error, quiero decir que debe asegurarse de que ambos lados de la conversión estén expresados ​​en milisegundos. – Ajibola

2

Joda-Time

Si por el tiempo época que significaba una cuenta de milisegundos desde el primer momento de 1970 en UTC, entonces aquí es un código de ejemplo usando la biblioteca Joda-Time ...

DateTimeZone timeZone = DateTimeZone.forID("Europe/Paris"); 
DateTime dateTime = new DateTime(yourMilliseconds, timeZone); 
String output = DateTimeFormat.forStyle("S-").withLocale(Locale.CANADA_FRENCH).print(dateTime); 

Otros Epochs

Esa definición de época es común debido a su uso dentro de Unix. Pero tenga en cuenta que al menos un couple dozen epoch definitions es utilizado por varios sistemas informáticos.

11
Date date = new Date(String); 

esto está obsoleto.

solución

Date date = new Date(1406178443 * 1000L); 
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 
    format.setTimeZone(TimeZone.getTimeZone("Etc/UTC")); 
    String formatted = format.format(date); 

asegurarse de multiplicar por 1000L

+3

Solo un comentario menor, debe cambiar el HH: MM: ss.SSS a HH: mm: ss.SSS - MM es el mes y no los minutos. – Leo

+0

gracias Damith: D –

0

Prueba esto ...

marca de tiempo de la muestra es Epoch 1414492391238

Método:

public static String GetHumanReadableDate(long epochSec, String dateFormatStr) { 
    Date date = new Date(epochSec * 1000); 
    SimpleDateFormat format = new SimpleDateFormat(dateFormatStr, 
      Locale.getDefault()); 
    return format.format(date); 
} 

Usabilidad:

long timestamp = Long.parseLong(engTime)/1000; 
String engTime_ = GetHumanReadableDate(timestamp, "dd-MM-yyyy HH:mm:ss aa"); 

Resultado:

28-10-2014 16:03:11 pm

feliz de codificación

+1

3 problemas con esta respuesta. Esta respuesta ignora la cuestión crucial de la zona horaria. Esta respuesta usa un formato diferente al solicitado en la Pregunta. Y esta respuesta esencialmente duplica las otras tres respuestas publicadas hace meses. No veo ningún valor agregado aquí. –

0

basan en las respuestas anteriores, al pasar por defecto del sistema Locale y TimeZone ...

String epochToIso8601(long time) { 
    String format = "yyyy-MM-dd HH:mm:ss"; 
    SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault()); 
    sdf.setTimeZone(TimeZone.getDefault()); 
    return sdf.format(new Date(time * 1000)); 
} 
0

prueba este

Date date = new Date(1476126532838L); 
DateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); 
format.setTimeZone(TimeZone.getTimeZone("Etc/UTC")); 
String formatted = format.format(date); 
format.setTimeZone(TimeZone.getTimeZone("Asia/Colombo"));//your zone 
formatted = format.format(date); 
System.out.println(formatted); 
Cuestiones relacionadas