Pregunta

Estoy teniendo algunos problemas con el calendario de Java. Estoy analizar algunos datos de un archivo txt, y la necesidad de crear una fecha. Después de completar el siguiente código:

tmpYear = Double.parseDouble(row[yearIndex]);
tmpMonth = Double.parseDouble(row[monthIndex]);
tmpDay = Double.parseDouble(row[dayIndex]);
if(timeIndex != -1)
    tmpTime = Double.parseDouble(row[timeIndex]);
if(secondsIndex != -1)
    tmpSeconds = Double.parseDouble(row[secondsIndex]);

Me puede depurar y ver que las variables son las siguientes: tmpYear == 2010
tmpMonth == 12
tmpDay == 30
tmpTime == 15 (Esta es la hora del día)
tmpSeconds == 0

Sin embargo, cuando se ejecuta el código siguiente:

cal.set((int)tmpYear,(int)tmpMonth,(int)tmpDay,(int)tmpTime,
            (int)((tmpTime - (int)tmpTime)*100),(int)tmpSeconds);
System.out.println(cal.getTime().toString());

Me estoy poniendo esto para una salida:
Dom Ene 30 de 2011 15:00:00 CST

Puede alguien explicar lo que sería una posible razón de esto? Gracias a todos de antemano por la ayuda!

¿Fue útil?

Solución

meses están indexados en lugar de 0-11 1-12.
0 = Enero | 1 = Febrero
...
11 = Diciembre
Uso tmpMonth = value -1 lugar.

Otros consejos

Creo inicia valor del mes a 0 en lugar de 1 por lo que interpreta como 0-ene-1 como febrero ... y luego otra vez como Ene 12.

A partir de la API:

mes - el valor utiliza para establecer el campo de hora MES. valor del mes es Basado en 0. por ejemplo, 0 para enero.

Cuando se configura el campo Calendar.MONTH, que está basado en cero. {Enero = 0 ... Diciembre 11} =

La razón es muy sencilla: fallo de diseño en la API de Calendario. Por eso el JSR 310 está en camino con el fin de mejorar el soporte de Java para las fechas.

Técnicamente, los autores de la clase pensó que era bueno utilizar sólo los campos estáticos. Así que lo que necesita hacer es utilizar el siguiente:

calendar = ...
calendar.setMonth(Calendar.JANUARY);

No creía que las personas podrían necesitar ajustes dinámicos para un calendario, al igual que lo necesita (y la mayoría de nosotros, por lo que importa).

Los valores del mes va de 0 (enero) a 11 (diciembre). Trate de usar ((int) tmpMonth) - 1 cuando se ajusta el mes para obtener diciembre.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top