Comment contrôler la capitalisation des noms de mois et de jours renvoyés par DateFormat?

StackOverflow https://stackoverflow.com/questions/66750

  •  09-06-2019
  •  | 
  •  

Question

Voici un programme de test rapide:

    public static void main( String[] args )
{
    Date date = Calendar.getInstance().getTime();

    System.out.println("Months:");
    printDate( "MMMM", "en", date );
    printDate( "MMMM", "es", date );
    printDate( "MMMM", "fr", date );
    printDate( "MMMM", "de", date );

    System.out.println("Days:");
    printDate( "EEEE", "en", date );
    printDate( "EEEE", "es", date );
    printDate( "EEEE", "fr", date );
    printDate( "EEEE", "de", date );

}

public static void printDate( String format, String locale, Date date )
{
    System.out.println( locale + ": " + (new SimpleDateFormat( format, new Locale( locale ) )).format( date ) );
}

Le résultat est:

Mois: fr: septembre es: septiembre septembre: de: septembre Journées: en: lundi es: lunes lundi de: Montag

Comment puis-je contrôler la capitalisation des noms. Pour une raison quelconque, l’espagnol et le français semblent toujours renvoyer les noms commençant par une lettre minuscule.

Était-ce utile?

La solution

Toutes les langues ne partagent pas les règles de capitalisation anglais. J'imagine que vous auriez besoin de modifier les données utilisées par l'API, mais vos clients non anglophones pourraient ne pas l'apprécier…

à propos de la capitalisation française

Autres conseils

Les règles de capitalisation sont différentes pour différentes langues. En français, les noms de mois ne doivent pas être capitalisés .

Vous pouvez ne pas vouloir changer la capitalisation - différentes cultures capitalisent des mots différents (par exemple, vous mettez en majuscule chaque nom, pas seulement les noms propres).

tl; dr

  

Comment puis-je contrôler la capitalisation des noms

Vous n’êtes pas. Différentes langues et différentes cultures ont des règles différentes concernant la capitalisation, la ponctuation, l’abréviation, etc.

Month.from( LocalDate.now( ZoneId.of( "Pacific/Auckland" ) ) )    // Get current month.
     .getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH )     // Localize automatically. Specify `Locale` to determine human language and cultural norms for translation. 
  

f & # 233; vrier

LocalDate.now( ZoneId.of( "Pacific/Auckland" ) )                  // Get current date as seen by people in a certain region (time zone).
    .getDayOfWeek()                                               // Get the day-of-week as a pre-defined `DayOfWeek` enum object.
    .getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH )
  

lundi

Localiser

Comme d’autres l’ont déclaré, vous ne devriez pas forcer vos propres notions de capitalisation paroissiales (anglais américain?). Utilisez une bibliothèque date-heure décente et laissez-la localiser automatiquement pour vous.

java.time

Vous utilisez d'anciennes classes de date-heure terribles héritées, supplantées par les classes java.time.

Le LocalDate La classe représente une valeur de date uniquement sans heure et sans fuseau horaire.

Un fuseau horaire est crucial pour déterminer une date. Pour un moment donné, la date varie dans le monde entier par zone. Par exemple, quelques minutes après minuit, Paris France est un nouveau jour alors que & encore Hier & # 8221; in Montr & # 233; al Qu & # 233; bec .

Spécifiez un nom de fuseau horaire approprié au format continent / région , tel que Amérique / Montréal , < a href = "https://en.wikipedia.org/wiki/Africa/Casablanca" rel = "nofollow noreferrer"> Afrique / Casablanca ou Pacifique / Auckland . N'utilisez jamais les abréviations de 3 ou 4 lettres telles que EST ou IST car elles ne sont pas , ni normalisées ni uniques ( !)

ZoneId z = ZoneId.of( "Asia/Kolkata" );
LocalDate today = LocalDate.now( z );

Pour travailler avec un mois, extrayez un < code> Mois enum objet. Idem pour le jour de la semaine, DayOfWeek .

Appelez getDisplayName . Passez un TextStyle pour l'abréviation. Transmettez un Paramètres régionaux . a> déterminer (a) la langue humaine pour la traduction du nom du jour, du nom du mois, etc., et (b) les normes culturelles déterminant les questions d’abréviations, de majuscules, de ponctuations, de séparateurs, etc. Notez que Paramètres régionaux n'a rien à faire avec le fuseau horaire.

Month m = today.getMonth() ;
String mNameQuébec = m.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ; 
String mNameGermany = m.getDisplayName( TextStyle.FULL , Locale.GERMANY ) ; 

& # 8230; et & # 8230;

DayOfWeek dow = today.getDayOfWeek() ;
String dowNameQuébec = dow.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ; 

String dowNameGermany = dow.getDisplayName (TextStyle.FULL, Locale.GERMANY);

À propos de java.time

Le java.time est intégré à Java 8 et aux versions ultérieures. Ces classes supplantent les anciennes classes de date-heure héritées , telles que java.util.Date , Agenda , & amp ; SimpleDateFormat .

Le projet Joda-Time , maintenant dans < a href = "https://en.wikipedia.org/wiki/Maintenance_mode" rel = "nofollow noreferrer"> mode de maintenance , conseille la migration vers le classes java.time .

Pour en savoir plus, consultez le Didacticiel Oracle . . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .

Avec un pilote JDBC conforme à JDBC version 4.2 ou ultérieure, vous pouvez échanger des objets java.time directement avec votre base de données. Pas besoin de chaînes ni de classes java.sql. *.

Où obtenir les classes java.time?

Le projet ThreeTen-Extra étend le java.time avec des cours supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts à java.time. Vous pouvez trouver ici des classes utiles telles que Intervalle , YearWeek , < code> YearQuarter , et plus .

J'ai un problème maintenant où une phrase commence par "dimanche 07 mars", ce qui importerait peu si ce n'était pas au début d'une phrase. Je suppose que cela ne peut pas être changé, sauf si je manipule manuellement la chaîne sur le premier caractère de la chaîne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top