Es java.util.Date usando TimeZone?

Tengo 2 computadoras diferentes, cada una con TimeZone diferente.

En una computadora, System.currentTimeMillis() y luego imprimo el siguiente comando en ambas computadoras: System.out.println(new Date(123456)); -> 123456 representa el número que vino en el currentTimeMillis en la computadora n. ° 1.

La segunda impresión (aunque está escrita con hardcoded) da como resultado diferentes impresiones, en ambas computadoras. ¿porqué es eso?

¿Qué tal un detalle pedante?

java.util.Date es independiente de la zona horaria. Lo dice muy bien en el javadoc.

¿Quieres algo con respecto a una zona horaria particular? Eso es java.util.Calendar .

¿La parte difícil? Cuando imprime estas cosas (con java.text.DateFormat o una subclase ), eso implica un calendario (que implica una zona horaria). Ver DateFormat.setTimeZone () .

Seguro que se ve (no se ha comprobado la implementación) como java.util.Date.toString () pasa por un formato de fecha. Así que incluso nuestra clase (en su mayoría) independiente de la zona horaria se descompone con zonas horarias.

¿Desea obtener esos elementos de la zona horaria de nuestros objetos Date sin zonas puros? Hay Date.toGMTString () . O puede crear su propio SimpleDateFormatter y usar setTimeZone () para controlar qué zona se usa usted mismo.

Porque ese número de milisegundos es la cantidad de milisegundos después del 1/1/1970 UTC. Si luego traduces a una zona horaria diferente, el tiempo representado será diferente.

por ejemplo, 123456 puede corresponder al mediodía en Greenwich (UTC). Pero ese será un momento diferente en Nueva York.

Para confirmar esto, use SimpleDateFormat con un resultado de zona horaria y / o cambie la zona horaria en la segunda computadora para que coincida con la primera.

¿porqué es eso?

Porque algo como “4 de octubre de 2009, 14:20” no tiene sentido sin conocer la zona horaria a la que se refiere, que probablemente puedas ver ahora, porque ese es mi momento mientras escribo esto, y probablemente difiera por varias horas de tu tiempo a pesar de que es el mismo momento en el tiempo.

Las marcas de tiempo de la computadora generalmente se miden en UTC (básicamente la zona horaria de Greenwich, Inglaterra), y la zona horaria debe tenerse en cuenta al formatearlas en algo legible para las personas.

javadoc explica esto bien, System.currentTimeMillis () Tenga en cuenta que si bien la unidad de tiempo del valor de retorno es un milisegundo, la granularidad del valor depende del sistema operativo subyacente y puede ser mayor. Por ejemplo, muchos sistemas operativos miden el tiempo en unidades de decenas de milisegundos.

Consulte https://docs.oracle.com/javase/7/docs/api/java/util/Date.html#toString () .

Sí, está usando zonas horarias. También debe imprimirlos (los tres caracteres antes del año).