2012-06-19 14 views
24

que tienen un valor como el siguiente Mon Jun 18 00:00:00 IST 2012 y quiero convertir esto en 18/06/2012Cómo convertir "Lun Jun 18 00:00:00 IST 2012" al 18/06/2012?

Cómo convertir esto?

Probé este método

public String toDate(Date date) { 
     SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
     Date theDate = null; 
     //String in = date + "/" + month + "/" + year; 
     try { 
      theDate = dateFormat.parse(date.toString()); 
      System.out.println("Date parsed = " + dateFormat.format(theDate)); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     return dateFormat.format(theDate); 
    } 

pero lanza siguiente excepción:

java.text.ParseException: Unparseable date: "Mon Jun 18 00:00:00 IST 2012"

+0

Ver sección relacionada en esta página –

+2

@Kazekage Gaara puede ver mi edición ahora, esperemos que sepa la respuesta. – SAR

+1

De acuerdo con Tony, en lugar de votar un gran comentario, las personas pueden intentar responder si no permiten que otros respondan. – SAR

Respuesta

54

espero siguiente programa va a resolver su problema

String dateStr = "Mon Jun 18 00:00:00 IST 2012"; 
DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy"); 
Date date = (Date)formatter.parse(dateStr); 
System.out.println(date);   

Calendar cal = Calendar.getInstance(); 
cal.setTime(date); 
String formatedDate = cal.get(Calendar.DATE) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" +   cal.get(Calendar.YEAR); 
System.out.println("formatedDate : " + formatedDate);  
+0

Agarwal gracias, resolvió mi problema. – SAR

+1

Creo que el formato para el ejemplo _dateStr_ debe ser: SimpleDateFormat ("** EEE MMM dd HH: mm: ss z yyyy **") – Pascal

+0

gracias funciona .. – vijayk

4

Sólo hay que añadir: nuevo SimpleDateFormat ("bla bla bla", Locale.US)

public static void main(String[] args) throws ParseException { 
    java.util.Date fecha = new java.util.Date("Mon Dec 15 00:00:00 CST 2014"); 
    DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.US); 
    Date date; 
    date = (Date)formatter.parse(fecha.toString()); 
    System.out.println(date);   

    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
    String formatedDate = cal.get(Calendar.DATE) + "/" + 
      (cal.get(Calendar.MONTH) + 1) + 
      "/" +   cal.get(Calendar.YEAR); 
    System.out.println("formatedDate : " + formatedDate); 
} 
+0

¿Cómo agrega valor más allá de la [respuesta de dos años ya aceptada] (http://stackoverflow.com/a/11097520/642706)? –

1

También puede utilizar una fórmula en Excel con el fin de convertir este tipo de fecha a un tipo de fecha de Excel puede leer: =DATEVALUE(CONCATENATE(MID(A1,8,3),MID(A1,4,4),RIGHT(A1,4)))

y se obtiene: 12/7/2016 de: Wed Dec 07 00:00:00 UTC 2016

+0

Esta pregunta es sobre programación Java, no hojas de cálculo de Microsoft Excel. –

1

java .time

El enfoque moderno es con las clases java.time. Estos suplantan a las antiguas y problemáticas clases antiguas de fecha y hora como Date, Calendar y SimpleDateFormat.

Parse como ZonedDateTime.

String input = "Mon Jun 18 00:00:00 IST 2012"; 
DateTimeFormatter f = DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss z uuuu") 
             .withLocale(Locale.US); 
ZonedDateTime zdt = ZonedDateTime.parse(input , f); 

Extraer un objeto de sólo fecha, un LocalDate, sin cualquier momento del día y sin ningún tipo de zona horaria.

LocalDate ld = zdt.toLocalDate(); 
DateTimeFormatter fLocalDate = DateTimeFormatter.ofPattern("dd/MM/uuuu"); 
String output = ld.format(fLocalDate) ; 

Volcar a la consola.

System.out.println("input: " + input); 
System.out.println("zdt: " + zdt); 
System.out.println("ld: " + ld); 
System.out.println("output: " + output); 

de entrada: Lun Jun 18 de 00:00:00 IST 2012

zdt: 2012-06-18T00: 00 + 03: 00 [Asia/Jerusalem]

ld: 2012 -06-18

de salida: 18/06/2012

ver este code run live in IdeOne.com.

mala elección del formato

Su formato es una mala elección para el intercambio de datos: difícil de leer por humanos, difícil de analizar por ordenador, utiliza códigos no estándar 3-4 de zona letra, y asume Inglés.

En su lugar, utilice los formatos estándar ISO 8601 siempre que sea posible. Las clases java.time usan los formatos ISO 8601 de forma predeterminada al analizar/generar valores de fecha y hora.

Especifique un proper time zone name en el formato de continent/region, como America/Montreal, Africa/Casablanca, o Pacific/Auckland. Nunca use la abreviatura de 3-4 letras como EST o IST ya que son no zonas horarias verdaderas, no estandarizadas, y ni siquiera únicas (!). Por ejemplo, su uso de IST puede ser hora estándar irlandesa, hora estándar de Israel (según la interpretación de java.time, vista anteriormente) o hora estándar de la India.


Sobre java.time

El marco java.time está incorporado en Java 8 y versiones posteriores. Estas clases suplantan a las viejas y problemáticas clases de fecha y hora legacy, como java.util.Date, Calendar, & SimpleDateFormat.

El proyecto Joda-Time, ahora en maintenance mode, recomienda la migración a las clases java.time.

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

¿Dónde obtener las clases java.time?

  • Java SE 8 y SE 9 y más tarde
    • incorporado.
    • Parte de la API estándar de Java con una implementación integrada.
    • Java 9 agrega algunas características menores y correcciones.
  • Java SE 6 y SE 7
    • Gran parte de la funcionalidad de back-java.time está portado a Java 6 & 7 en ThreeTen-Backport.
  • Android

El proyecto se extiende ThreeTen-Extra java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval, YearWeek, YearQuarter y more.

Cuestiones relacionadas