2012-05-07 9 views
9

La documentación para Date.getTimezoneOffset dice:¿Por qué se desactivó Date.getTimezoneOffset?

desuso. A partir de la versión 1.1 de JDK, reemplazado por - (Calendar.get (Calendar.ZONE_OFFSET) + Calendar.get (Calendar.DST_OFFSET))/(60 * 1000).

¿Por qué estaba obsoleto? ¿Hay un camino más corto (Apache Commons?) Para obtener el desplazamiento de UTC en horas/minutos? Tengo un objeto Date ... ¿Debería convertirlo a JodaDate para esto?

Y antes de preguntar por qué quiero el desplazamiento UTC, es solo para iniciar sesión, nada más.

+2

Debería cambiar a JodaTime por cualquier cosa relacionada con el manejo de Fecha y hora en Java IMHO. – pcalcao

+4

Porque no todos los timezone offset son enteros. En otras palabras, no cada zona horaria es una hora anterior o posterior a la zona horaria adyacente. Consulte http://www.timeanddate.com/worldclock/ –

+2

@GilbertLeBlanc - devuelve minutos, no horas. – ripper234

Respuesta

10

Hay 2 preguntas aquí.

  1. ¿Por qué se desactivó Date.getTimezoneOffset?

Creo que es porque realmente desaprobaron casi todos los métodos de Fecha y movieron su lógica al calendario. Se espera que usemos set y get genéricos con el parámetro que indica qué campo específico necesitamos. Este enfoque tiene algunas ventajas: menos cantidad de métodos y la capacidad de ejecutar setters en un bucle que pasa un campo diferente cada vez. Personalmente, utilicé mucho esta técnica: hace que el código sea más corto y más fácil de mantener.

  1. ¿Atajo? Pero ¿qué pasa con la llamada

Calendar.get(Calendar.DST_OFFSET) comparación con Calendar.getTimeZoneOffset()

Por lo que yo puedo ver la diferencia es de 6 caracteres.

Joda es una biblioteca muy sólida y si realmente tiene que escribir un código de manipulación de fecha sofisticado, cambie a ella. Yo personalmente uso el estándar java.util.Calendar y no veo ninguna razón para usar bibliotecas externas: un buen calendario viejo es lo suficientemente bueno para mí.

+1

+1 por recomendar a Joda. –

+0

Aceptaré esto porque 'de hecho desaprobaron todos los métodos de Fecha'. Todo el mundo recomendando que cambie a joda: relájate, por favor, es un objeto de fecha en una API que estoy usando, realmente no puedo cambiar la API ahora, ¿puedo? – ripper234

3

toda la lógica de la manipulación de la fecha fue trasladado fuera del Date una vez que los ejecutores de Java se dieron cuenta de que podría ser necesario implementar de forma diferente para diferentes tipos de calendarios (de ahí la necesidad de utilizar un GregorianCalendar para recuperar esta información ahora). Un Date ahora es solo un contenedor alrededor de un valor de tiempo UTC.

2

Tenga cuidado antes de pegar el código de esta página. Tal vez sólo yo, pero creo que con el fin de conseguir el desplazamiento en minutos lo que necesita hacer

int tzOffsetMin = (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET))/(1000*60); 

en lugar de lo que dice el Javadoc tz, que es:

int tzOffsetMin = -(cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET))/(1000*60); 



Calendar.ZONE_OFFSET le da el desplazamiento estándar (en mseg) de UTC. Esto no cambia con DST. Por ejemplo, en la zona horaria de la costa este de EE. UU., Este campo siempre será de -6 horas independientemente del horario de verano.

Calendar.DST_OFFSET le ofrece el desplazamiento DST actual (en mseg), si corresponde.Por ejemplo, durante el verano en un país que usa DST, es probable que este campo tenga el valor +1 hora (1000 * 60 * 60 msecs).