example - java timezone list
Forzar zona horaria Java como GMT/UTC (9)
Además, si puede establecer la zona horaria JVM de esta manera
System.setProperty("user.timezone", "EST");
o -Duser.timezone=GMT
en los -Duser.timezone=GMT
JVM.
Necesito forzar operaciones relacionadas con el tiempo a GMT / UTC, independientemente de la zona horaria configurada en la máquina. ¿Alguna forma conveniente de hacerlo en código?
Para aclarar, estoy usando la hora del servidor de base de datos para todas las operaciones, pero sale formateada de acuerdo con la zona horaria local.
¡Gracias!
Guau. Sé que este es un hilo antiguo, pero todo lo que puedo decir es que no llames a TimeZone.setDefault () en ningún código de nivel de usuario. Esto siempre establece la zona horaria para toda la JVM y casi siempre es una muy mala idea. Aprenda a usar la biblioteca joda.time o la nueva clase DateTime en Java 8, que es muy similar a la biblioteca joda.time.
Puede cambiar la zona horaria usando TimeZone.setDefault() , incluso solo temporalmente, para algunas operaciones.
Recuperé el tiempo de la base de datos en forma cruda (marca de tiempo larga o fecha de Java) y luego uso SimpleDateFormat para formatearlo, o calendario para manipularlo. En ambos casos, debe establecer la zona horaria de los objetos antes de usarlo.
Ver SimpleDateFormat.setTimeZone(..)
y Calendar.setTimeZone(..)
para detalles
Si desea obtener la hora GMT solo con intiger: var currentTime = new Date (); var currentYear = ''2010'' var currentMonth = 10; var currentDay = ''30 ''var currentHours = ''20'' var currentMinutes = ''20 ''var currentSeconds = ''00'' var currentMilliseconds = ''00 ''
currentTime.setFullYear(currentYear);
currentTime.setMonth((currentMonth-1)); //0is January
currentTime.setDate(currentDay);
currentTime.setHours(currentHours);
currentTime.setMinutes(currentMinutes);
currentTime.setSeconds(currentSeconds);
currentTime.setMilliseconds(currentMilliseconds);
var currentTimezone = currentTime.getTimezoneOffset();
currentTimezone = (currentTimezone/60) * -1;
var gmt ="";
if (currentTimezone !== 0) {
gmt += currentTimezone > 0 ? '' +'' : '' '';
gmt += currentTimezone;
}
alert(gmt)
Tuve que configurar la zona horaria JVM para Windows 2003 Server porque siempre devolvía GMT para Date () nuevo;
-Duser.timezone=America/Los_Angeles
O su zona horaria apropiada. Encontrar una lista de zonas horarias resultó ser un poco desafiante también ...
Aquí hay dos listas;
http://wrapper.tanukisoftware.com/doc/english/prop-timezone.html
cree un par de cliente / servidor, de modo que después de la ejecución, el servidor del cliente envíe la hora y la fecha correctas. Luego, el cliente le pregunta al servidor pm GMT y el servidor devuelve la respuesta correcta.
para mí, simplemente rápido SimpleDateFormat,
private static final SimpleDateFormat GMT = new SimpleDateFormat("yyyy-MM-dd");
private static final SimpleDateFormat SYD = new SimpleDateFormat("yyyy-MM-dd");
static {
GMT.setTimeZone(TimeZone.getTimeZone("GMT"));
SYD.setTimeZone(TimeZone.getTimeZone("Australia/Sydney"));
}
luego formatee la fecha con diferentes zonas horarias.
El OP respondió a esta pregunta para cambiar la zona horaria predeterminada para una sola instancia de una JVM en ejecución, establezca la propiedad del sistema user.timezone
:
java -Duser.timezone=GMT ... <main-class>
Si necesita establecer zonas horarias específicas al recuperar los objetos de fecha / hora / marca de tiempo de un conjunto de resultados de la base de datos, use la segunda forma de los métodos getXXX
que toma un objeto de Calendar
:
Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
ResultSet rs = ...;
while (rs.next()) {
Date dateValue = rs.getDate("DateColumn", tzCal);
// Other fields and calculations
}
O bien, establezca la fecha en un Estado Preparado:
Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
PreparedStatement ps = conn.createPreparedStatement("update ...");
ps.setDate("DateColumn", dateValue, tzCal);
// Other assignments
ps.executeUpdate();
Esto asegurará que el valor almacenado en la base de datos sea consistente cuando la columna de la base de datos no mantenga la información de la zona horaria.
Las clases java.util.Date
y java.sql.Date
almacenan el tiempo real (milisegundos) en UTC. Para formatear estos en la salida a otra zona horaria, use SimpleDateFormat
. También puede asociar una zona horaria con el valor utilizando un objeto Calendar:
TimeZone tz = TimeZone.getTimeZone("<local-time-zone>");
//...
Date dateValue = rs.getDate("DateColumn");
Calendar calValue = Calendar.getInstance(tz);
calValue.setTime(dateValue);