Convertir un mes en texto con Java

25/Ene/2013 Java , , , 13 Comentarios

Para convertir un mes en texto con Java necesitamos una fecha en formato adecuado por tanto usaremos la implementacion de Java llamada Date.

  1. public static String dateMonth(Date date){
  2. //Aquí en código
  3. }

Luego debemos proceder a extraer el mes en formato numerico, usando Calendar una clase que permite manejo de fechas. Pero para esto no debemos olvidar que Calendar extrae el mes en formato numerico pero en base a iniciar el conteo de meses desde 0. Por tanto el mes 0 seria enero, el 1 febrero y asi sucesivamente...

  1. Calendar calendar=Calendar.getInstance();
  2. calendar.setTime(date);
  3. int month=0;
  4.  
  5. try{
  6. month=calendar.get(Calendar.MONTH);
  7. } catch(Exception ex){}

Y seguidamente procedemos a hacer la conversion por medio el uso de switch.

  1. switch(month){
  2. case 0:
  3. {
  4. result="Enero";
  5. break;
  6. }
  7. case 1:
  8. {
  9. result="Febrero";
  10. break;
  11. }
  12. case 2:
  13. {
  14. result="Marzo";
  15. break;
  16. }
  17. case 3:
  18. {
  19. result="Abril";
  20. break;
  21. }
  22. case 4:
  23. {
  24. result="Mayo";
  25. break;
  26. }
  27. case 5:
  28. {
  29. result="Junio";
  30. break;
  31. }
  32. case 6:
  33. {
  34. result="Julio";
  35. break;
  36. }
  37. case 7:
  38. {
  39. result="Agosto";
  40. break;
  41. }
  42. case 8:
  43. {
  44. result="Septiembre";
  45. break;
  46. }
  47. case 9:
  48. {
  49. result="Octubre";
  50. break;
  51. }
  52. case 10:
  53. {
  54. result="Noviembre";
  55. break;
  56. }
  57. case 11:
  58. {
  59. result="Diciembre";
  60. break;
  61. }
  62. default:
  63. {
  64. result="Error";
  65. break;
  66. }
  67. }

Quedando de esta forma nuestra funcion de la forma siguiente:

  1. public static String dateMonth(Date date){
  2. String result="";
  3. Calendar calendar=Calendar.getInstance();
  4. calendar.setTime(date);
  5. int month=0;
  6.  
  7. try{
  8. month=calendar.get(Calendar.MONTH);
  9. }catch(Exception ex){}
  10. switch(month){
  11. case 0:
  12. {
  13. result="Enero";
  14. break;
  15. }
  16. case 1:
  17. {
  18. result="Febrero";
  19. break;
  20. }
  21. case 2:
  22. {
  23. result="Marzo";
  24. break;
  25. }
  26. case 3:
  27. {
  28. result="Abril";
  29. break;
  30. }
  31. case 4:
  32. {
  33. result="Mayo";
  34. break;
  35. }
  36. case 5:
  37. {
  38. result="Junio";
  39. break;
  40. }
  41. case 6:
  42. {
  43. result="Julio";
  44. break;
  45. }
  46. case 7:
  47. {
  48. result="Agosto";
  49. break;
  50. }
  51. case 8:
  52. {
  53. result="Septiembre";
  54. break;
  55. }
  56. case 9:
  57. {
  58. result="Octubre";
  59. break;
  60. }
  61. case 10:
  62. {
  63. result="Noviembre";
  64. break;
  65. }
  66. case 11:
  67. {
  68. result="Diciembre";
  69. break;
  70. }
  71. default:
  72. {
  73. result="Error";
  74. break;
  75. }
  76. }
  77. return result;
  78. }

Bueno ahora solo nos queda ver como funciona en codigo el convertir un mes en texto con Java:

  1. Calendar calendar=Calendar.getInstance();
  2. Date now=calendar.getTime();
  3. System.out.println(dateMonth(now));

Vídeos sobre Java


13 comentarios en “Convertir un mes en texto con Java”

xhrist14n

Alex

Creo que la forma más sencilla sería.

public String getStringMonth(int month){
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.set(Calendar.MONTH,month);
String nameMonth = cal.getDisplayName(Calendar.MONTH, Calendar.LONG, new Locale(“es”,”ES”));
System.out.println(nameMonth);
return nameMonth;
}

xhrist14n

Alex

public static ArrayList Meses = new ArrayList(13);

public static void agregarMesesAlmanax() {
Meses.add(0, “Enero”);
Meses.add(1, “Febrero”);
Meses.add(2, “Marzo”);
Meses.add(3, “Abril”);
Meses.add(4, “Mayo”);
Meses.add(5, “Junio”);
Meses.add(6, “Julio”);
Meses.add(7, “Agosto”);
Meses.add(8, “Septiembre”);
Meses.add(0, “Octubre”);
Meses.add(10, “Noviembre”);
Meses.add(11, “Diciembre”);
}

private void algo(){
int mes = Calendar.getInstance().get(2);
String meses = CentroInfo.MesesAlmanax.get(mes);
}

espero que te sirva es muy facil el codigo de entender

xhrist14n

Vetuster

Seguro?

Prueba con el Japonés…

¿Sabes lo que es el acoplamiento?

xhrist14n

xhrist14n

no es nada del otro mundo poner ese array en el lenguaje que uno desee usar ….

xhrist14n

Vetuster

xhrist14n: sólo sirve para Español (Castellano)…

xhrist14n

xhrist14n

ya miren no es por tratar de malograr sus aportes pero todo se puede reducir a esto

import java.util.*;

/**
*
* @author christian portilla pauca
*/
public class JMesTexto {
public static String[] meses={
“Enero”,”Febrero”,”Marzo”,”Abril”,
“Mayo”,”Junio”,”Julio”,”Agosto”,
“Septiembre”,”Octubre”,”Noviembre”,”Diciembre”
};
public static String dateMonth(Date date ){
Calendar calendar=Calendar.getInstance(); //linea 1
calendar.setTime(date); //linea 2
return meses[calendar.get(Calendar.MONTH)]; //linea 3
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
System.out.println(dateMonth(Calendar.getInstance().getTime()));
}
}
//es un modo bastante simple y pueden probarlo es igual de simple que usar switch …

xhrist14n

Vetuster

Hola xhrit1an: pues, contando el enum, son 4 sentencias justas, más bien, creo que será difícil hacerlo más simple. No obstante, el código de los demás está para eso, para ser mejorado.

Salu2.

xhrist14n

xhrist14n

vetuster tu comentario esta muy bueno ….

esta es una forma un poco compleja pero buena de programar….

xhrist14n

Vetuster

Bueno, yo no diría complejidad, si no que, es un método de carácter general. Particularizando para el nombre del mes podría ser:

public enum Month {
JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE,
JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER
}

public class DateUtil {

public String getMonthName(Month month, Locale locale) {
SimpleDateFormat formatter = new SimpleDateFormat(“MMMM”, locale);
Calendar calendar = new GregorianCalendar(2013, month.ordinal(), 1);
return formatter.format(calendar.getTime());
}

System.out.println(dateUtil.getMonthName(Month.JANUARY,
new Locale(“es”))); // -> enero

Salu2

xhrist14n

xhrist14n

Segun veo ese ultimo codigo parece funcionar pero no entiendo para que manejar tanta complejidad en codigo solo deseamos obtener meses por nombre nada mas, me parece que complicarse tanto no es necesario….

xhrist14n

Vetuster

public class DateUtil {

/**
* Devuelve una cadena con la fecha especificada (date)
* en el formato indicado por el patrón (pattern)
* con las características culturales (locale) dadas.
* @param date fecha a formatear.
* @param pattern patrón o formato que cumple la fecha.
* @param locale características culturales (país/lenguage)
* @return cadena con la fecha especificada en el formato
* indicado por el patrón y características culturales.
* @exception NullPointerException si alguno de los argumentos es nulo
* @exception IllegalArgumentException si alguno de los argumentos
* es inválido.
*/
public String print(Calendar date, String pattern, Locale locale) {
if (date == null || pattern == null || locale == null) {
throw new NullPointerException(“print: null params”);
}
SimpleDateFormat formatter = null;
try {
formatter = new SimpleDateFormat(pattern,locale);
} catch (IllegalArgumentException iaex) {
throw new IllegalArgumentException(“print: invalid pattern”);
}
String stringDate = null;
try {
stringDate = formatter.format(date.getTime());
} catch (IllegalArgumentException iaex) {
throw new IllegalArgumentException(
“print(” + date.toString() + “,” + pattern + “)”);
}
return stringDate;
}

public class DateUtilTest extends TestCase {

public void testPrint() {
DateUtil dateUtil = new DateUtil();
Calendar calendar = new GregorianCalendar(1985,Calendar.JULY,28);
String expected = “28 de julio de 1985”;
String pattern = “dd ‘de’ MMMM ‘de’ yyyy”;
Locale locale = new Locale(“es”);

assertEquals(expected,
dateUtil.print(calendar, pattern, locale));
System.out.println(dateUtil.print(calendar, pattern, locale));
}

xhrist14n

xhrist14n

Es cierto se puede usar un Hashmap o bien un simple arreglo, en este caso se buscaba hacer uso de la estructura del switch, la implementacion con arreglos es bastante similar en logica solo se haria uso de if o en todo caso un for….

xhrist14n

ARIEL

También se pudo haber usado un mapa para hacer lo mismo (gracias por el tip Rodrigo Salado Anaya)

import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;

public class VerMes{
public static void main(String[] args) {
Calendar calendar=Calendar.getInstance();
Date now=calendar.getTime();
verMes(now);
}

public static void verMes(Date date){
String result = “”;
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int month = 0;

month = calendar.get(Calendar.MONTH);

HashMap mapa=new HashMap();
String[] meses={“Enero”,
“Febrero”,
“Marzo”,”Abril”,
“Mayo”,”Junio”,
“Julio”,”Agosto”,
“Septiembre”,”Octubre”,
“Noviembre”,”Diciembre”};

//lenar el mapa
for(int i=0;i<meses.length;i++){
mapa.put(i,meses[i]);
}

Iterator it = mapa.entrySet().iterator();
while (it.hasNext()) {
Map.Entry e = (Map.Entry)it.next();
if(e.getKey().equals(month)){ System.out.println("Nombre del mes es: "+e.getValue());}
}

}

}

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*