Obtenga día, mes y año por separado usando SimpleDateFormat

Tengo un SimleDateFormat como este

 SimpleDateFormat format = new SimpleDateFormat("MMM dd,yyyy hh:mm"); String date = format.format(Date.parse(payback.creationDate.date)); 

Estoy dando fecha con el formato como "Jan,23,2014" .

Ahora, quiero conseguir día, mes y año por separado. ¿Cómo puedo implementar esto?

Si necesita obtener los valores por separado, utilice más de un SimpleDateFormat .

 SimpleDateFormat dayFormat = new SimpleDateFormat("dd"); String day = dayFormat.format(Date.parse(payback.creationDate.date)); SimpleDateFormat monthFormat = new SimpleDateFormat("MM"); String month = monthFormat .format(Date.parse(payback.creationDate.date)); 

Etc.

  SimpleDateFormat format = new SimpleDateFormat("MMM dd,yyyy hh:mm", Locale.ENGLISH); Date theDate = format.parse("JAN 13,2014 09:15"); Calendar myCal = new GregorianCalendar(); myCal.setTime(theDate); System.out.println("Day: " + myCal.get(Calendar.DAY_OF_MONTH)); System.out.println("Month: " + myCal.get(Calendar.MONTH) + 1); System.out.println("Year: " + myCal.get(Calendar.YEAR)); 

Wow, SimpleDateFormat para obtener partes de cuerdas? Se puede resolver mucho más fácil si su cadena de entrada es como "Enero, 23,2014":

 String input = "Jan,23,2014"; String[] out = input.split(","); System.out.println("Year = " + out[2]); System.out.println("Month = " + out[0]); System.out.println("Day = " + out[1]); 

Salida:

 Year = 2014 Month = Jan Day = 23 

Pero si realmente quieres usar SimpleDateFormat por alguna razón, la solución será la siguiente:

 String input = "Jan,23,2014"; SimpleDateFormat format = new SimpleDateFormat("MMM,dd,yyyy"); Date date = format.parse(input); Calendar calendar = Calendar.getInstance(TimeZone.getDefault()); calendar.setTime(date); System.out.println(calendar.get(Calendar.YEAR)); System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); System.out.println(new SimpleDateFormat("MMM").format(calendar.getTime())); 

Salida:

 2014 23 Jan 

La respuesta aceptada aquí sugiere utilizar más de un SimpleDateFormat , pero es posible hacerlo utilizando una instancia de SimpleDateFormat y llamando a applyPattern .

Nota: creo que este mensaje también sería útil para aquellos que estaban buscando setPattern () como yo.

 Date date=new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat(); simpleDateFormat.applyPattern("dd"); System.out.println("Day : " + simpleDateFormat.format(date)); simpleDateFormat.applyPattern("MMM"); System.out.println("Month : " + simpleDateFormat.format(date)); simpleDateFormat.applyPattern("yyyy"); System.out.println("Year : " + simpleDateFormat.format(date)); 

Utilice esto para analizar "Enero, 23,2014"

 SimpleDateFormat fmt = new SimpleDateFormat("MMM','dd','yyyy"); Date dt = fmt.parse("Jan,23,2014"); 

Entonces usted puede conseguir cualquier parte de la fecha.

¿Está aceptando esto?

 int day = 25 ; //25 int month =12; //12 int year = 1988; // 1988 Calendar c = Calendar.getInstance(); c.set(year, month-1, day, 0, 0); SimpleDateFormat format = new SimpleDateFormat("MMM dd,yyyy hh:mm"); System.out.println(format.format(c.getTime())); 

Mostrar como Dec 25,1988 12:00

UPDATE: basado en el comentario

 DateFormat format = new SimpleDateFormat("MMM"); System.out.println(format.format(format.parse("Jan,23,2014"))); 

NOTA: Date.parse () es @deprecated y según API se recomienda utilizar DateFormat.parse

Java.time

Las otras respuestas utilizan clases anticuadas. Las clases java.time suplantan aquellas viejas y fastidiosas clases de legado.

LocalDate

La clase LocalDate representa un valor de fecha única sin hora del día y sin zona horaria.

 String input = "Jan,23,2014"; DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMM,d,uuuu" ); LocalDate ld = LocalDate.parse( input , f ); 

Interrogate para las piezas que usted quiere.

 int year = ld.getYear(); int month = ld.getMonthValue(); int dayOfMonth = ld.getDayOfMonth(); 

Acerca de java.time

El framework java.time está integrado en Java 8 y posterior. Estas clases suplantan las viejas clases problemáticas de fecha y hora, como java.util.Date , .Calendar , y java.text.SimpleDateFormat .

El proyecto Joda-Time , ahora en modo de mantenimiento , recomienda la migración a java.time.

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

Gran parte de la funcionalidad de java.time es back-portada a Java 6 & 7 en ThreeTen-Backport y adaptada además a Android en ThreeTenABP (consulte Cómo usar … ).

El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un terreno probatorio para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles como Interval , YearWeek , YearQuarter y más.

 public static String getDate(long milliSeconds, String dateFormat) { // Create a DateFormatter object for displaying date in specified // format. SimpleDateFormat formatter = new SimpleDateFormat(dateFormat, Locale.getDefault()); // Create a calendar object that will convert the date and time value in // milliseconds to date. Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(milliSeconds); return formatter.format(calendar.getTime()); } 
  • SimpleDateFormat ParseException: Unparseable date Error
  • ¿Cómo puedo obtener la fecha actual en Android?
  • Android SimpleDateFormat no funciona
  • Pregunta simple sobre java SimpleDateFormat
  • Problema con el análisis Fecha cadena:
  • Conflicto de modo de 12/24 horas
  • Java ParseException al intentar la anotación String to Date
  • Android.text.format.DateFormat "HH" no se reconoce como con java.text.SimpleDateFormat
  • Mes sin ceros iniciales en Android
  • android obtener la fecha anterior de una fecha correspondiente (no la fecha de ayer)
  • Unix timestamp a datetime en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.