2012-04-25 16 views
9

Quiero obtener el día en "6to 7mo .. etc." de la cadena de fecha.Convertir Fecha y hora en "6 de abril de 2012" formato

He intentado SimpleDateFormater & también intento con DateFormatSymbols. No estoy recibiendo cadenas requeridas.

¿Hay alguna solución?

+2

Cree su propio método SimpleDateForter utilizando Format() – Lucifer

+0

del ' 'st', 'nd', 'th'' parte se logrará con cierta lógica, porque no hay ningún modificador de fecha que maneja automáticamente – waqaslam

+0

intente como respuesta dada en http://stackoverflow.com/questions/4011075/how-do-you-format-the-day-of-the-month-to-say-11th-21st- or-23rd-in-java – Khan

Respuesta

18
SimpleDateFormat format = new SimpleDateFormat("d"); 
String date = format.format(new Date()); 

if(date.endsWith("1") && !date.endsWith("11")) 
    format = new SimpleDateFormat("EE MMM d'st', yyyy"); 
else if(date.endsWith("2") && !date.endsWith("12")) 
    format = new SimpleDateFormat("EE MMM d'nd', yyyy"); 
else if(date.endsWith("3") && !date.endsWith("13")) 
    format = new SimpleDateFormat("EE MMM d'rd', yyyy"); 
else 
    format = new SimpleDateFormat("EE MMM d'th', yyyy"); 

String yourDate = format.format(new Date()); 

Prueba de esto, esto parece una cierta estática sino que funciona bien ...

+0

heh, ¿qué hay del 12? o 13 °? –

+0

termina el 2 y 3, por lo que es válido –

+0

debería ser 12 y 13 es mi punto –

1

Usted podría subclase SimpleDateFormat y anular formato, y el uso de una función de utilidad simple que toma en una cadena o un entero y devuelve una cadena, ya sea con "nd" o "c" unida ... algo así como:

if (initialDate.equals("2") || initialDate.equals("22"){ 
    return initialDate += "nd"; 
}else if {initialDate.equals("3") || initialDate.equals("23"){ 
    return initialDate += "rd"; 
}else{ 
    return initialDate += "th"; 
} 
+0

3º? Puede que quieras arreglar eso :) – dymmeh

+0

¿Qué pasa con la parte 'th'? :) – waqaslam

+0

1º, 2º, 3º, 4º ... 5º .. 6º .. 7º .. 8º .. 9º .. 10º ... también lo necesito ... @Waqas "th" de hecho! :) – dymmeh

5

Aquí van:

/** 
* Converts Date object into string format as for e.g. <b>April 25th, 2012</b> 
* @param date date object 
* @return string format of provided date object 
*/ 
public static String getCustomDateString(Date date){ 
    SimpleDateFormat tmp = new SimpleDateFormat("MMMM d"); 

    String str = tmp.format(date); 
    str = str.substring(0, 1).toUpperCase() + str.substring(1); 

    if(date.getDate()>10 && date.getDate()<14) 
     str = str + "th, "; 
    else{ 
     if(str.endsWith("1")) str = str + "st, "; 
     else if(str.endsWith("2")) str = str + "nd, "; 
     else if(str.endsWith("3")) str = str + "rd, "; 
     else str = str + "th, "; 
    } 

    tmp = new SimpleDateFormat("yyyy"); 
    str = str + tmp.format(date); 

    return str; 
} 

Muestra:

Log.i("myDate", getCustomDateString(new Date())); 

de abril de 25o, 2012

1

El siguiente método se puede utilizar para obtener la cadena con formato de la fecha en que se pasa a ella. Formateará la fecha para decir 1st, 2nd, 3rd, 4th .. usando SimpleDateFormat en Java. por ejemplo: - 1º de septiembre de, el año 2015

public String getFormattedDate(Date date){ 
     Calendar cal=Calendar.getInstance(); 
     cal.setTime(date); 
     //2nd of march 2015 
     int day=cal.get(Calendar.DATE); 

     switch (day % 10) { 
     case 1: 
      return new SimpleDateFormat("MMMM d'st', yyyy").format(date); 
     case 2: 
      return new SimpleDateFormat("MMMM d'nd', yyyy").format(date); 
     case 3: 
      return new SimpleDateFormat("MMMM d'rd', yyyy").format(date); 
     default: 
      return new SimpleDateFormat("MMMM d'th', yyyy").format(date); 
    } 
Cuestiones relacionadas