Estoy tratando de ejecutar un programa Java, pero está tomando una zona horaria GMT predeterminada en lugar de una zona horaria definida por el sistema operativo. Mi versión JDK es 1.5 y el sistema operativo es Windows Server Enterprise (2007)
Windows tiene una zona horaria central especificada, pero cuando ejecuto el siguiente programa, me da una hora GMT.
import java.util.Calendar;
public class DateTest
{
public static void main(String[] args)
{
Calendar now = Calendar.getInstance();
System.out.println(now.getTimeZone());
System.out.println(now.getTime());
}
}
Aquí está la salida
sun.util.calendar.ZoneInfo[id="GMT",
offset=0,
dstSavings=0,
useDaylight=false,
transitions=0,
lastRule=null]
Mon Mar 22 13:46:45 GMT 2010
Tenga en cuenta que no quiero establecer la zona horaria desde la aplicación. Quiero que la zona horaria utilizada por JVM sea la especificada en el sistema operativo. (No encuentro estos problemas con otros servidores que tienen la versión 1.4 de JDK y Microsoft Server 2003).
Cualquier pensamiento sería muy apreciado.
DateTest
clase?-Duser.timezone
valorRespuestas:
Puedes pasar la JVM este parámetro
Por ejemplo
y esto debería hacer el truco. Establecer la variable de entorno TZ también hace el truco en Linux.
fuente
También puede establecer la zona horaria predeterminada en su código utilizando el siguiente código.
A tí
fuente
La respuesta aceptada arriba:
No funcionó para mí exactamente. Solo pude cambiar con éxito mi zona horaria cuando no tenía comillas alrededor de los parámetros:
fuente
En Windows 7 y para JDK6, tuve que agregar
-Duser.timezone="Europe/Sofia"
a la variable de sistema JAVA_TOOL_OPTIONS ubicada en "Mi computadora => Propiedades => Configuración avanzada del sistema => Variables de entorno".Si ya tiene alguna otra propiedad establecida,
JAVA_TOOL_OPTIONS
solo agregue un espacio y luego inserte su cadena de propiedad.fuente
Dos opciones que no creo que se cubrieron en las otras respuestas:
Evitar la necesidad
Independientemente de lo que haga para configurar la zona horaria predeterminada de JVM, es muy difícil asegurarse de que nadie más la configure de manera diferente. Se puede configurar en cualquier momento sin previo aviso desde otra parte de su programa o desde otro programa que se ejecute en la misma JVM. Por lo tanto, en sus operaciones horarias sea explícito sobre la zona horaria que desea, y siempre sabrá lo que obtiene independientemente de la configuración de JVM. Ejemplo:
Salida de ejemplo:
System.setProperty
Para muchos propósitos, lo siguiente no será la forma preferida, y ciertamente puede ser mal utilizado. Para los programas de "descarte", a veces me resulta práctico. También puede establecer una propiedad del sistema desde Java:
Esto acaba de imprimir:
Si desea validar la cadena que está pasando, use:
fuente
Si estás usando Maven :
fuente
mvn spring-boot:run -Drun.jvmArguments="-Duser.timezone=UTC"
para Spring Boot v1.En win7, si desea establecer la zona horaria correcta como parámetro en JRE, debe editar el archivo
deployment.properties
almacenado en la rutac:\users\%username%\appdata\locallow\sun\java\deployment
agregando la cadenadeployment.javaws.jre.1.args=-Duser.timezone\=
my_time_zonefuente