web-dev-qa-db-fra.com

Avertissement SimpleDateFormat Pour obtenir un formatage local, utilisez getDateInstance (), getDateTimeInstance () ou getTimeInstance (),

Dois-je m'inquiéter de cet avertissement? Et si j'ignore l'avertissement?
Que signifie cet avertissement? 
Pour obtenir le formatage local, utilisez getDateInstance(), getDateTimeInstance() ou getTimeInstance(), ou utilisez new SimpleDateFormat(String template, Locale locale) avec, par exemple, Locale.US pour les dates ASCII.
Dans la 2ème ligne du code ci-dessous. L'application fonctionne correctement avec le code. Je voulais montrer la date, par exemple, 19 Nov 2014.

public static String getFormattedDate(long calendarTimeInMilliseconds) {
    SimpleDateFormat sdfDate = new SimpleDateFormat("d MMM yyyy");  //ON THIS LINE
    Date now = new Date();
    now.setTime(calendarTimeInMilliseconds);
    String strDate = sdfDate.format(now);
    return strDate;
}

Je pense que ceci est une manière correcte de formater la date comme indiqué ici .

19
Mohammed Ali

Vous utilisez actuellement le constructeur SimpleDateFormat (String) . Cela implique les paramètres régionaux par défaut et, comme le dit la documentation relative aux paramètres régionaux, méfiez-vous des paramètres régionaux par défaut car une sortie inattendue peut être produite sur différents systèmes.

Vous devriez plutôt utiliser le constructeur SimpleDateFormat (String, Locale) . Il va prendre dans un paramètre supplémentaire - les paramètres régionaux que vous souhaitez utiliser. Si vous voulez vous assurer que la sortie est lisible par machine de manière cohérente (elle a toujours la même apparence, quelle que soit la locale réelle de l’utilisateur), vous pouvez choisir Locale.US . Si vous ne vous souciez pas de la redabilité de la machine, vous pouvez explicitement la configurer pour qu'elle utilise Locale.getDefault () .

Utiliser ceux de votre exemple de code ressemblerait à ceci:

// for US
SimpleDateFormat sdfDate = new SimpleDateFormat("d MMM yyyy", Locale.US);

// or for default
SimpleDateFormat sdfDate = new SimpleDateFormat("d MMM yyyy",
        Locale.getDefault());
43
Valter Jansons

Vous pouvez l'ignorer, mais l'avertissement est là pour vous informer que les dates peuvent s'afficher de manière inattendue pour les utilisateurs utilisant une langue différente. Si vous souhaitez forcer le format dans vos propres paramètres régionaux, utilisez Locale.US (ou tout paramètre régional correspondant à vos exigences de format). Sinon, utilisez l’une des méthodes getInstance () pour la mise en forme localisée.

2
JstnPwll

Idem pour kotlin

        //example long 1372339860 
        fun getDateTime(unixSeconds: Long): String {
         val date = Java.util.Date(unixSeconds * 1000L)

         val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss z", Locale.getDefault())
         return simpleDateFormat.format(date)
        }

Appelez comme ceci getDateTime(1372339860)

Il renverra 27.6.2013 15:31:00 GMT +2 Le GMT+2 car je suis en Allemagne et nous avons l'heure d'été. Vous pouvez également utiliser Locale.US.

0
kuzdu