Milliseconds hasta la fecha en GMT en Java

Tengo que cubrir milisegundos a la fecha GMT (en la aplicación de Android), por ejemplo:

1372916493000

Cuando lo convierto por este código:

 Calendar cal = Calendar.getInstance(); cal.setTimeZone(TimeZone.getTimeZone("GMT")); cal.setTimeInMillis(millis); Date date = cal.getTime(); 

el resultado es 07:41 07/04/2013 . El resultado es el mismo cuando uso sólo:

 Date date = new Date(millis); 

Desafortunadamente el resultado parece incorrecto, parece que mi hora local. Traté de convertir el mismo número por este servicio y el resultado es 05:41 07/04/2013 , que creo que es correcto. Así que tengo dos horas de diferencia. Alguien tiene alguna sugerencia / consejos ¿qué hay de malo con mi conversión?

Si el resultado que parece incorrecto significa System.out.println(date) entonces no es ninguna sorpresa, porque Date.toString convierte la fecha en representación de cadena en zona horaria local. Para ver el resultado en GMT puedes usar esto

 SimpleDateFormat df = new SimpleDateFormat("hh:ss MM/dd/yyyy"); df.setTimeZone(TimeZone.getTimeZone("GMT")); String result = df.format(millis); 

Parecía que estabas desordenado con tu zona horaria de origen y el huso horario UTC durante la conversión.

Supongamos que usted está en Londres (actualmente Londres tiene 1 hora por delante de GMT) y los milisegundos es el tiempo en su zona horaria de origen (en este caso, Londres).

Entonces, probablemente debería:

 Calendar cal = Calendar.getInstance(); // Via this, you're setting the timezone for the time you're planning to do the conversion cal.setTimeZone(TimeZone.getTimeZone("Europe/London")); cal.setTimeInMillis(1372916493000L); // The date is in your home timezone (London, in this case) Date date = cal.getTime(); TimeZone destTz = TimeZone.getTimeZone("GMT"); // Best practice is to set Locale in case of messing up the date display SimpleDateFormat destFormat = new SimpleDateFormat("HH:mm MM/dd/yyyy", Locale.US); destFormat.setTimeZone(destTz); // Then we do the conversion to convert the date you provided in milliseconds to the GMT timezone String convertResult = destFormat.parse(date); 

Por favor, hágamelo saber si correctamente su punto?

Aclamaciones

prueba esto

 public class Test{ public static void main(String[] args) throws IOException { Test test=new Test(); Date fromDate = Calendar.getInstance().getTime(); System.out.println("UTC Time - "+fromDate); System.out.println("GMT Time - "+test.cvtToGmt(fromDate)); } private Date cvtToGmt( Date date ) { TimeZone tz = TimeZone.getDefault(); Date ret = new Date( date.getTime() - tz.getRawOffset() ); // if we are now in DST, back off by the delta. Note that we are checking the GMT date, this is the KEY. if ( tz.inDaylightTime( ret )) { Date dstDate = new Date( ret.getTime() - tz.getDSTSavings() ); // check to make sure we have not crossed back into standard time // this happens when we are on the cusp of DST (7pm the day before the change for PDT) if ( tz.inDaylightTime( dstDate )) { ret = dstDate; } } return ret; } } 

Resultado de la prueba :
Hora UTC – Mar May 15 16:24:14 IST 2012
Hora GMT – Mar May 15 10:54:14 IST 2012

Date date = cal.getTime();

fecha de devolución creada mediante

 public final Date getTime() { return new Date(getTimeInMillis()); } 

donde getTimeInMillis() devuelve milisegundos sin ningún TimeZone.

Yo sugeriría buscar aquí cómo hacer lo que usted quiere cómo manejar-calendario-timezones-using-java

  • Obtener código fuente HTML de codificado EditText en Android
  • Imagen de Android para cambiar el tamaño de la memoria del error
  • El objeto de interfaz no funciona cuando se llama desde otro fragmento
  • Admob no llena todo el ancho
  • Android OutOfMemory pero con memoria de sobra
  • Guardar los datos del sensor en el archivo de android
  • Siguiente redirecciones en HTTPResponse Android
  • ¿Cómo reanudar la reproducción de vídeo después de destruir la superficie?
  • Importa datos de JSON o XML feed y crea una lista en Android
  • Índices de eventos multitouch para Android
  • ¿hay un acceso directo en eclipse para generar recursos (constructores, get / set ...)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.