java - settimezone - timezone gettimezone utc 3
Convierte una cadena en GregorianCalendar (2)
Tengo una cadena de un encabezado de correo electrónico, como Date: Mon, 27 Oct 2008 08:33:29 -0700
. Lo que necesito es una instancia de GregorianCalendar, que representará el mismo momento. Tan fácil como eso, ¿cómo lo hago?
Y para los más rápidos, esto no va a funcionar correctamente:
SimpleDateFormat format = ... // whatever you want
Date date = format.parse(myString)
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date)
porque normalizará la zona horaria a UTC (o la hora de su máquina local, según la versión de Java). Lo que necesito es calendar.getTimeZone (). GetRawOffset () para devolver -7 * milisInAnHour
.
Yo recomendaría buscar en la biblioteca de Joda Time, si esa es una opción. Normalmente estoy en contra de utilizar una biblioteca de terceros cuando la plataforma central proporciona una funcionalidad similar, pero hice de esto una excepción porque el autor de Joda Time también está detrás de JSR310, y Joda Time básicamente se incorporará finalmente a Java 7.
http://joda-time.sourceforge.net/
De todos modos, si Joda Time es una opción, algo como esto debería funcionar:
DateTimeFormatter formatter =
DateTimeFormat.forPattern("your pattern").withOffsetParsed();
DateTime dateTime = formatter.parseDateTime("your input");
GregorianCalendar cal = dateTime.toGregorianCalendar();
Espero que esto ayude.
Y para los más rápidos, esto no funcionará correctamente ... porque normalizará la zona horaria a UTC (o la hora de su máquina local, dependiendo de la versión de Java). Lo que necesito es calendar.getTimeZone (). GetRawOffset () para devolver -7 * milisInAnHour.
Bien, técnicamente esto funciona, porque si bien devolverá un objeto con TimeZone igual al TimeZone del sistema actual, la hora se modificará para tener en cuenta el desplazamiento.
Este código:
String dateString = "Mon, 27 Oct 2008 08:33:29 -0700";
DateFormat df = new SimpleDateFormat("E, dd MMM yyyy hh:mm:ss Z");
Date parsed = df.parse(dateString);
System.out.println("parsed date: " + parsed);
Calendar newCalendar = Calendar.getInstance();
newCalendar.setTime(parsed);
productos:
fecha de análisis: lunes 27 de octubre, 11:33:29 EDT 2008
que técnicamente es correcto, ya que mi zona horaria del sistema es EDT / UTC menos cuatro horas (que es tres horas antes que la suya). Si expresa el tiempo como el número de milisegundos desde el 1 de enero de 1970, 00:00:00 GMT (que es cómo el objeto Date
almacena su fecha / hora), estas fechas / horas son iguales, es solo TimeZone que es diferente .
Tu problema es realmente ¿Cómo convierto una fecha / calendario en mi zona horaria? Para eso, eche un vistazo a mi respuesta a la pregunta anterior ¿ Cómo manejar calendarios TimeZones usando Java?