2011-12-05 15 views
5

hago lo siguiente:Java Calendario regresa diferentes fechas

Calendar c = Calendar.getInstance(TimeZone.getTimeZone("Europe/Berlin")); 
c.setFirstDayOfWeek(Calendar.MONDAY); 
c.set(Calendar.DAY_OF_MONTH, 9); 
c.set(Calendar.MONTH, 3); 
c.set(Calendar.YEAR, 2011); 
c.set(Calendar.HOUR_OF_DAY, 10); 
c.set(Calendar.MINUTE, 20); 
int week = c.get(Calendar.WEEK_OF_YEAR) 

en mi máquina local es mi zona horaria Europe/Berlin. En mi servidor es UTC. La ejecución de este código en la máquina local devuelve semana = 14. La ejecución de este código en mi servidor devuelve la semana = 15.

Estoy fuera de las ideas - ¿alguien puede explicar que a mí? Esto me causa un gran problema :-(

Gracias por cualquier punteros.

Cheers, Cristiano

+1

¿está seguro de que está recibiendo resultados diferentes? Desde el fragmento de código no importaría en absoluto en qué zona horaria se encuentra porque de todos modos está configurando manualmente el día y la hora del día. Este código siempre devolvería 15 en mi mente. – BVSmallman

+0

Sí, estoy extremadamente seguro: he copiado esto de una prueba de Junit. Se ejecuta localmente, pero falla en mi servidor. :-( – Christian

+0

Creo que ha estropeado su copia o su experimento de alguna manera. Si ejecuto este código ([copia completa] (http://pastie.org/2972306)) en mi máquina, que está configurada en GMT/BST (BST a partir de esa fecha), recibo semana = 14. Además, no veo por qué importar en Berlín vs. UTC sería importante en este caso, ya sea a las 10:20 a.m. (Berlín) u 8:20 am (UTC - ya que Berlín estaría en horario de verano en abril, es +2 en lugar de +1), de cualquier manera todavía es la semana 14. –

Respuesta

4

es su configuración regional. Al tener un es_ES java locale es la semana 14, cuando se realiza una localidad en_US la semana es 15. Configure ambas máquinas en la misma configuración regional y deberían funcionar ahora.

Solo probé mi configuración regional frente a la alemana, y no pude encontrar una lista confiable en línea de las configuraciones regionales que tenían el recuento de semanas desplazadas, pero estoy seguro de que este es el problema para usted.

Para ver la configuración regional mediante programación:

Locale.getDefault(); 

Para cambiar la configuración regional en Windows 7:

Control Panel --> Region & Language --> Location Tab --> Current Location 
+0

Sospecho que esto es de hecho lo que es. @Christian, si uso [este código] (http://pastie.org/2972365) que usa 'Locale.GERMAN', obtengo' week = 14'; pero si cambio mi configuración regional a EE. UU. utilizando [este código] (http://pastie.org/2972369), obtengo 'semana = 15'. –

+1

+1; pero en lugar de cambiar la configuración regional de toda la aplicación, podría tener más sentido llamar a 'c.setMinimalDaysInFirstWeek (1)' (para obtener el estilo de EE. UU. en todas partes) o 'c.setMinimalDaysInFirstWeek (7)' (para obtener estilo alemán) en todos lados). Esto dependerá de las necesidades del negocio, por supuesto. – ruakh

+0

Ah días-mínimos en la primera semana, agradable. Esta respuesta (o una nueva) debería describir esa característica, ¡que definitivamente no es obvia! –

Cuestiones relacionadas