2010-12-17 31 views
38

Tengo un problema en DatePicker en Android cuando uso el método getMonth() y luego devuelve un valor incorrecto.DatePicker muestra el valor incorrecto del mes

Por ejemplo:

DatePicker datepicker=new DatePicker(); 

int day=date.getDayOfMonth(); 
int month=date.getMonth(); 
int year=date.getYear(); 

t.setText(""+day+"/"+month+"/"+year); 

Si voy a seleccionar aug 06 de 1987 luego volverá 07/06/1987

Creo que es un error, si no dime la razón por favor.

+0

También puede tomar el código de http://developer.android.com/resources/tutorials/views/hello-datepicker.html Es muy fácil. solo sigue los pasos dados. Funciona. – khushi

Respuesta

62

Como se describe en Android SDK, los meses se indexan comenzando en 0. Esto significa que agosto es el mes 8, o el índice 7, por lo que le da el resultado correcto.

Es simple cuestión de sumar 1 al índice devuelto por la API para obtener el mes tradicional con un índice.

Aunque este comportamiento puede parecer extraño, es coherente con la clase java.util.Calendar (aunque es no coherente con joda.time.DateTime).

+4

Si tiene una matriz con los nombres de los meses, quiere que los meses estén indexados en cero para coincidir con esta matriz. Los días no tienen este problema, un número es todo lo que cualquiera espera. – PearsonArtPhoto

2

No hay ningún error en esto. El recuento de meses en la clase Calendario se basa en cero. see this.

21

En Android, al seleccionar una fecha del selector de fecha, se empieza a contar los meses de 0. Por lo tanto, esto significa que el valor devuelto mes es siempre el mes − 1.

Por ejemplo, se selecciona Agosto (el 8 ° mes), luego devuelve 8 − 1 = 8.

Esto significa que lo que necesita hacer es agregar 1 al valor de mes que obtiene del DatePicker. Puede hacerlo de esta manera:

DatePicker datepicker = new DatePicker(); 

int day = date.getDayOfMonth(); 
int month = date.getMonth()+1; // here I added 1 to the month 
int year = date.getYear(); 

t.setText(""+day+"/"+month+"/"+year); 
2

Usted puede utilizar el siguiente código:

String mes = this.datepicker.getMonth()/10==0?("0"+this.datepicker.getMonth()): 
String.valueOf(this.datepicker.getMonth()); 
1

La razón que se me ocurre por qué esto ha sido en el util de Java es la siguiente:

Considérese días del 1 de enero al 31 de enero.

Un día como el 22 de enero se puede considerar como 0 mes + 22 días de ese año. Considerando que el 15 de febrero se puede indicar como: 1 mes + 15 días de ese año.

Del mismo modo el 10 de diciembre se puede indicar como: 11 meses + 10 días de ese año.

Por lo tanto, enero-diciembre se conoce como 0-11.

Cuestiones relacionadas