Comment définir la mise en forme de la date et de l’heure en Java en respectant les parameters du système d’exploitation de l’utilisateur

J’exécute mon application Java sur une machine Windows 7 où mes parameters régionaux sont configurés pour mettre en forme les dates AAAA-mm-jj et l’heure comme HH: mm: ss (par exemple “2011-06-20 07:50:28”) . Mais quand j’utilise le DateFormat.getDateTimeInstance().format Pour formater ma date, je ne vois pas cela au lieu de “20-Jun-2011 7:50:28 AM”. Que dois-je faire pour formater les dates de la manière dont mes clients ont configuré le système d’exploitation pour afficher les dates?

Voici à quoi ressemble mon code en question:

 File selGameLastTurnFile = selectedGame.getLastTurn ().getTurnFile (); Date selGameModifiedDate = new Date (selGameLastTurnFile.lastModified()); if (selectedGame.isYourTurn ()) { gameInfo = Messages.getFormattedSsortingng ("WhoseTurnIsIt.Prompt.PlayTurn", //$NON-NLS-1$ FileHelper.getFileName (selGameLastTurnFile), DateFormat.getDateTimeInstance().format(selGameModifiedDate)); } else { gameInfo = Messages.getFormattedSsortingng ("WhoseTurnIsIt.Prompt.SentTurn", //$NON-NLS-1$ selGameLastTurnFile.getName (), DateFormat.getDateTimeInstance().format(selGameModifiedDate)); } 

Les appels à Messages.getFormattedSsortingng utilisent MessageFormat pour placer la date dans une phrase qui ressemblera à ceci:

Jouez le tour ‘QB Nat vs Ian 008’ (reçu le 20 juin 2011 à 7:50:28)

Cependant, les parameters de mon système d’exploitation sont configurés pour formater la date comme je l’ai décrit ci-dessus et je m’attendais à voir ceci:

Jouer le turn ‘QB Nat vs Ian 008’ (reçu le 2011-06-20 07:50:28)

J’ai cherché ici et sur d’autres sites de programmation Java et je n’ai pas trouvé la réponse, mais cela semble être une chose tellement évidente que j’ai envie de rater quelque chose d’évident.

Vous ne pouvez pas faire cela en Java pur. Sun / Oracle ne peut en aucun cas rendre ce système indépendant.

Un rapide aperçu des bibliothèques .NET donne cette page – pour citer:

L’utilisateur peut choisir de remplacer certaines des valeurs associées à la culture actuelle de Windows via la partie des options régionales et linguistiques du Panneau de configuration. Par exemple, l’utilisateur peut choisir d’afficher la date dans un format différent ou d’utiliser une devise autre que celle par défaut pour la culture. Si la propriété CultureInfo.UseUserOverride est définie sur true, les propriétés de l’object CultureInfo.DateTimeFormat, de l’object CultureInfo.NumberFormat et de l’object CultureInfo.TextInfo sont également extraites des parameters utilisateur.

Je suggère que vous le fassiez d’une manière qui dépend du système Windows si vous avez besoin de cette fonctionnalité (par exemple, accéder au registre Windows comme suggéré par @laz).

Tout d’abord, vous devez dire à Java à quoi ressemble le système LOCALE.

Vérifiez le système Java.
Ssortingng locale = System.getProperty("user.language")

Et puis formatez la date en conséquence (SimpleDateFormat)
SimpleDateFormat(Ssortingng pattern, Locale locale)

Reportez-vous au code Java pratique pour un exemple de travail …

 Ssortingng systemLocale = System.getProperty("user.language"); Ssortingng s; Locale locale; locale = new Locale(systemLocale ); s = DateFormat.getDateInstance(DateFormat.MEDIUM, locale).format(new Date()); System.out.println(s); // system locale is PT outputs 16/Jul/2011 locale = new Locale("us"); s = DateFormat.getDateInstance(DateFormat.MEDIUM, locale).format(new Date()); System.out.println(s); // outputs Jul 16, 2011 locale = new Locale("fr"); s = DateFormat.getDateInstance(DateFormat.MEDIUM, locale).format(new Date()); System.out.println(s); // outputs 16 juil. 2011 

Je pense que vous aurez besoin d’accéder au registre Windows pour cela. Voir cette question pour diverses solutions à ce qui lit / écrit à Windows Registry en utilisant Java .

Une fois que vous avez choisi l’une des nombreuses méthodes d’access au registre, vous devez obtenir la clé correcte dans le registre pour le format. Ce document indique que la clé à utiliser est HKEY_USERS\.Default\Control Panel\International .

Lorsque vous utilisez GNOME sous Linux, vous pouvez utiliser la commande gconftool similaire à la commande reg pour Windows, comme indiqué dans les liens précédents gconftool au registre Windows. Je vois la clé /apps/panel/applets/clock_screen0/prefs/custom_format dans ma configuration, même si elle est vide car j’utilise la valeur par défaut:

 gconftool -g /apps/panel/applets/clock_screen0/prefs/custom_format 

Je ne sais pas si c’est la valeur que vous souhaitez utiliser pour vos besoins ou non.

Sous Mac OS, je ne suis pas sûr de ce que vous feriez.

J’ai trouvé cette classe d’utilitaire Java par JetBrains qui récupère tous les parameters régionaux personnalisés du système d’exploitation (à la fois de Windows et de Mac) et effectue le formatage correct pour vous:

https://github.com/JetBrains/intellij-community/blob/master/platform/util/src/com/intellij/util/text/DateFormatUtil.java

C’est sous la licence Apache 2.0 que vous pouvez probablement l’utiliser dans votre projet.

Peut-être que je comprends mal ce que vous voulez dire, mais vous devez utiliser les parameters régionaux.

  DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE); 

En utilisant Locale, vous pouvez contrôler le format de la région que vous utilisez.