2010-06-07 7 views
6

estoy usando SimpleDateFormat para mostrar un calendario de esta manera:¿Por qué están meses libres uno con Java SimpleDateFormat?

public String getDate() 
{ 
    String DATE_FORMAT = "EEEE, dd/MM/yyyy HH:mm:ss"; 
    SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); 
    System.err.println(date.getTime().getMonth()); 
    return sdf.format(date.getTime()); 
} 

La cáscara vuelve 6 y la pantalla: mardi, 06/07/2010 12:44:52

No puede ser posible? Por qué ?

Gracias

+0

¿De dónde vino la variable 'date' en su código? ¿Es solo una variable de clase inicializada a la hora y fecha actual? –

+0

De 'date.set()' cuando 'Calendar date = Calendar.getInstance()' y no me di cuenta de que el mes debe estar entre 0 y 11. – Natim

+0

¿Cuál es el problema? Lo ejecutó el 7 de junio de 2010 y el resultado dice 06/07/2010. Eso es correcto. – stackoverflowuser2010

Respuesta

19

Desde el Java API:

public int getMonth()

devuelve un número que representa el mes que contiene o se inicia con el instante en el tiempo representado por este objeto Date. El valor devuelto está entre 0 y 11, con el valor 0 representando enero.

+0

Gracias, pero ¿por qué alguien pensaría que esta es una buena idea? –

1

método getMonth en Fecha es 0 indexado. de JavaDoc:

Devuelve un número que representa el mes que contiene o comienza con el instante en el tiempo representado por este objeto Date. El valor devuelto está entre 0 y 11, con el valor 0 representando enero.

0

que se establece en la configuración regional FRANCIA DD/MM/AA por lo que es el martes, julio de 2010. el sexto mes es julio si comienza en 0.

4

Desafortunadamente, meses en clase y clase DateCalendar son de base cero. (En mi opinión, este fue un gran error de diseño en esas clases, y es solo uno de los muchos errores de diseño en la API de fecha y hora de Java).

Tenga en cuenta que la clase Calendar tiene constantes para representar los meses: Calendar.JANUARY, Calendar.FEBRUARY etc. Utilice esos en lugar de los números sin procesar.

Una API de fecha y hora mucho mejor mencionada y mucho mejor para Java es Joda Time. Tenga en cuenta que hay una propuesta para agregar una nueva API de fecha y hora a la próxima versión de Java que se basará en Joda Time.

+3

Java heredó ese error de diseño de POSIX, creo. Originalmente diseñado para permitir que el valor del mes se use como un índice en una matriz de nombres de mes. –

1

mes índice comienza desde 0 al igual que el índice de matriz

Cuestiones relacionadas