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"
.
- SimpleDateFormat 24h
- SimpleDateFormat devuelve la fecha de la cadena en diferentes idiomas
- ¿Cómo puedo analizar una cadena de fecha con DateFormat?
- Calcular la diferencia entre dos veces android
- SimpleDateFormat parser
Ahora, quiero conseguir día, mes y año por separado. ¿Cómo puedo implementar esto?
- Mes en la clase SimpleDateFormat
- Formato de una cadena de fecha y hora sólo
- Formato de fecha de Android con SimpleDate
- Eliminar "0" principal en el día del mes SimpleDateFormat
- Android SimpleDateFormat devolver el tiempo incorrecto entre la medianoche y 1 am
- Get Value Of Day Month forma objeto de la fecha en Android?
- Android parse String hasta la fecha - carácter de patrón desconocido 'X'
- Patrón de caracteres 'L' en SimpleDateFormat
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()); }
- La versión ADT de Android se requiere 20.0.0 y superior
- (Android) listview con varios botones, no se puede hacer clic en el elemento de lista