java Europe / Problème de fuseau horaire de Minsk


J'ai écrit le programme suivant:

import sun.security.action.GetPropertyAction;

import java.security.AccessController;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

public class Main {

    public static void main(String[] args) {
        System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z").format(new Date()));
        System.out.println(TimeZone.getDefault().getDisplayName());

        String country =AccessController.doPrivileged(new GetPropertyAction("user.country"));
        System.out.println(country);

        String javaHome=AccessController.doPrivileged(new GetPropertyAction("java.home"));
        System.out.println(javaHome);

    }
}

Ensuite, j'ai défini un fuseau horaire GMT+3 Europe/Minsk sur mon ordinateur.

Si j'exécute ce programme avec la dernière version de JDK6, je vois qu'il me montre que mon fuseau horaire en Java est l'heure standard du Venezuela GMT+4.30 Si je l'exécute sur la dernière version JDK7, il me montre le fuseau horaire brésilien GMT-3, Si je l'exécute sur la dernière version JDK8, il me montre Moskow time GMT+3. Si je sélectionne un fuseau horaire Volgograd GMT+3 sur mon ordinateur Win7, le programme fonctionne correctement dans tous les versions de java. Alors, est-ce un bug dans JDK avec le fuseau horaire de Minsk?

Author: avalon, 2016-03-24

1 answers

Le problème est dû au fait que jusqu'en 2014, il n'y avait pas de fuseau horaire dédié Europe/Minsk (du moins sous Windows).

Il est apparu seulement après plusieurs changements de lois DST et fuseau horaire en Russie et en Biélorussie2011 et 2014.

Voir les problèmes correspondants JDK-8017129et JDK-8067758.

Les modifications sont déjà prises en compte dans les dernières versions de java. Les anciens JDK et JRE peuvent avoir besoin d'être corrigés via Timezone Updater Outil .

Les paramètres du fuseau horaire du système d'exploitation doivent également être mis à jour. Dans le cas de Windows, cela signifie que vous devez avoir KB2570791 et au moins KB2998527 correctifs installés.

Il existe également une solution de contournement alternative qui ne nécessite pas de correctif mentionné ci-dessus. Il suffit de coder en dur -Duser.timezone=GMT+3dans les paramètres de ligne de commande java des outils nécessaires ou globalement. Cela fonctionnerait bien jusqu'à ce que les prochains règlements changent. )

Mais passer à la dernière Java 8 serait bénéficiez également d'améliorations de stabilité et de performance.

 0
Author: Vadzim, 2017-06-11 09:22:48