10
votes

Quelle est la dépendance locale est SimpleDateDateFormat?

Je crée souvent SimpleDateFormat avec des motifs tels que HH: mm: SS ou AAAAYY-MM-DD Pour sortir les dates de sortie dans une locale de manière indépendante. Comme il existe également un constructeur qui prend également un paramètre local supplémentaire, je me demande s'il y a des cas où un tel format peut être dépendant des paramètres régionaux, ou si je devrais toujours spécifier la locale.Anglais ou Locale.germany. Permet de supposer que le fuseau horaire est défini explicitement.


0 commentaires

3 Réponses :


4
votes

Oui, SimpleDateFormat est absolument sensible à la localisation. Certains domaines, comme des heures et des minutes, sont indépendants locaux.

SimpleDateDormat prend également en charge modèle de date et heure localisée cordes. Dans ces cordes, les lettres de motif décrites ci-dessus peuvent être remplacées par d'autres lettres de motif, dépendantes locales. simpledateformat ne traite pas de la localisation du texte autre que les lettres de motif; c'est au client de la classe.

ou, vous pouvez utiliser l'environnement localalisation dateformat # getdateinstance () méthode d'usine à la place, puisque:

Public SimpleDateFormat (modèle de chaîne, locale locale)

construit un simpledateformat à l'aide du motif donné et des symboles de format de date par défaut pour la locale donnée. Remarque: ce constructeur peut ne pas supporter tous les locaux. Pour une couverture complète, utilisez les méthodes d'usine dans le DateFormat classe.


4 commentaires

Je demande des modèles qui ne contiennent aucun nom de mois ou de jour, par exemple AAAAYY-MM-DD , et je veux une sortie indépendante locale, épargnant peut-être quelques claviers en omettant le paramètre local.


@ Jörn: ah! Dans cet exemple spécifique, vous ne devriez pas avoir de problèmes en omettant le paramètre supplémentaire. Le formatage du fuseau horaire pourrait bien être une histoire différente. Néanmoins, vous serez peut-être préférable de laisser Java s'inquiéter des formats spécifiques aux paramètres régionaux (par exemple, de décider quand utiliser mm / dd / aaaa vs jj jj / mm / aaaa ) .


J'ai toujours pris l'habitude de spécifier toujours une locale (au moins lorsque l'application n'est pas une application cliente où le paramètre local système est toujours utilisé), pour vous assurer que je (ou quelqu'un d'autre) n'oublie pas de spécifier un si le modèle devait changer. Un peu comme la règle pour toujours utiliser des supports bouclés autour des blocs, même s'il n'a qu'une ligne.


@JB NIZET, bonne ligne directrice. Cela me ferait également penser à savoir si la date est à des fins d'affichage ou de consommation par un ordinateur.



18
votes

Il suffit de trouver la méthode statique gettavailablocalesales sur les paramètres régionaux, et il s'avère que tous les champs d'un calendrier peuvent être dépendants locaux: xxx

sur mon système ( En Allemagne, exécutez une version anglaise de Ubuntu) Cette sortie indique la liste suivante, espérons que le caractère Unicode est intervenu intact: xxx

donc Japon et Thaïlande Utilisez une autre époque, mais vous êtes autrement basé sur le Calendrier grégorien , ce qui explique pourquoi le mois et la journée sont La même chose.

D'autres locals utilisent également différents scripts pour écriture, par exemple hindi < / a> parlé en Inde et une variante de Thaï en Thaïlande.

Pour répondre à la question, les paramètres régionaux doivent toujours être précisés à un VA connu Lue quand une chaîne indépendante de locale est nécessaire.

EDIT: Java 1.6 Ajout d'une constante LOCALE.ROOT Pour spécifier une langue de langue / pays neutre. Cela serait préférable de spécifier les paramètres régionaux d'anglais pour la sortie ciblés sur un ordinateur.

La locale racine est la locale dont la langue, le pays et la variante sont des cordes vides (""). Ceci est considéré comme le paramètre local de base de tous les locaux et est utilisé comme langue neutre de langue / pays pour les opérations sensibles aux paramètres régionaux.


0 commentaires

-1
votes

Cela fonctionne pour moi, vous devriez peut-être l'essayer:

Temps de corde = nouveau SimpleDateFormat ("HH: mm: SS"). Format (nouvelle date ()); Code> P>

Sortie de la console: P>

11:52:45


0 commentaires