J'essaie d'exécuter un programme Java, mais il prend un fuseau horaire GMT par défaut au lieu d'un fuseau horaire défini par le système d'exploitation. Ma version JDK est 1.5 et le système d'exploitation est Windows Server Enterprise (2007)
Windows a un fuseau horaire central spécifié, mais lorsque j'exécute le programme suivant, il me donne une heure 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());
}
}
Voici la sortie
sun.util.calendar.ZoneInfo[id="GMT",
offset=0,
dstSavings=0,
useDaylight=false,
transitions=0,
lastRule=null]
Mon Mar 22 13:46:45 GMT 2010
Veuillez noter que je ne souhaite pas définir le fuseau horaire depuis l'application. Je veux que le fuseau horaire utilisé par JVM soit celui spécifié dans le système d'exploitation. (Je ne trouve pas ce problème avec d'autres serveurs qui ont la version 1.4 de JDK et Microsoft Server 2003).
Toutes les pensées seraient très appréciées.
DateTest
classe?-Duser.timezone
valeurRéponses:
Vous pouvez passer la JVM ce paramètre
Par exemple
et cela devrait faire l'affaire. La définition de la variable d'environnement TZ fait également l'affaire sous Linux.
la source
Vous pouvez également définir le fuseau horaire par défaut dans votre code à l'aide du code suivant.
A la votre
la source
La réponse acceptée ci-dessus:
Cela n'a pas fonctionné pour moi exactement. Je n'ai réussi à changer mon fuseau horaire que lorsque je n'avais pas de guillemets autour des paramètres:
la source
Sur Windows 7 et pour JDK6, j'ai dû ajouter
-Duser.timezone="Europe/Sofia"
aux JAVA_TOOL_OPTIONS variable système située sous "Mon ordinateur => Propriétés => Paramètres système avancés => Variables d'environnement".Si vous avez déjà une autre propriété définie pour
JAVA_TOOL_OPTIONS
simplement ajouter un espace, puis insérez votre chaîne de propriété.la source
Deux options qui, à mon avis, n'étaient pas couvertes dans les autres réponses:
Évitez le besoin
Quoi que vous fassiez pour définir le fuseau horaire par défaut de la JVM, il est très difficile de s'assurer que personne d'autre ne le définit différemment. Il peut être défini à tout moment sans préavis depuis une autre partie de votre programme ou depuis un autre programme s'exécutant dans la même JVM. Ainsi, dans vos opérations de temps, soyez explicite sur le fuseau horaire souhaité, et vous saurez toujours ce que vous obtenez indépendamment du paramètre JVM. Exemple:
Exemple de sortie:
System.setProperty
À de nombreuses fins, ce qui suit ne sera pas la méthode préférée, et il peut certainement être mal utilisé. Pour les programmes «à jeter», je trouve parfois cela pratique. Vous pouvez également définir une propriété système à partir de Java:
Cela vient d'imprimer:
Si vous souhaitez valider la chaîne que vous passez, utilisez:
la source
Si vous utilisez Maven :
la source
mvn spring-boot:run -Drun.jvmArguments="-Duser.timezone=UTC"
pour Spring Boot v1.Dans win7, si vous souhaitez définir le fuseau horaire correct comme paramètre dans JRE, vous devez éditer le fichier
deployment.properties
stocké dans path enc:\users\%username%\appdata\locallow\sun\java\deployment
ajoutant la chaînedeployment.javaws.jre.1.args=-Duser.timezone\=
my_time_zonela source