Frage

Hier ist ein kurzes Testprogramm:

    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 ) );
}

Die Ausgabe lautet:

Months: en: September es: septiembre fr: septembre de: September Days: en: Monday es: lunes fr: lundi de: Montag

Wie kann ich die Aktivierung der Namen steuern. Aus irgendeinem Grund die Spanisch und Französisch scheinen immer Namen zurückzugeben, die mit einem Kleinbuchstaben beginnen.

War es hilfreich?

Lösung

Nicht alle Sprachen teilen Englisch Kapitalisierungsvorschriften. Ich denke, Sie müssen die Daten von der API verwendet ändern, aber Ihre Nicht-Englisch Kunden vielleicht nicht schätzen ...

about.com auf französischer Kapitalisierung

Andere Tipps

Kapitalisierungsregeln sind für verschiedene Sprachen. In Französisch, Monatsnamen sollte nicht aktiviert werden.

Sie können nicht die Kapitalisierung ändern wollen - verschiedene Kulturen nutzen verschiedene Wörter (zum Beispiel in der deutschen Sie jedes Substantiv Kapital zu schlagen, nicht nur Eigennamen)

.

tl; dr

  

Wie kann ich die Aktivierung der Namen steuern

Sie dies nicht tun. Verschiedene Sprachen und verschiedene Kulturen haben unterschiedliche Regeln über Kapitalisierung, Zeichensetzung, Abkürzung, 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é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

Localize

Wie andere erwähnt, sollten Sie nicht Ihre eigene Pfarr (US-Englisch?) Werden zwingt Begriffe Kapitalisierung. Verwenden Sie eine ordentliche Datum Zeitbibliothek, und lassen Sie es für Sie automatisch lokalisiert.

java.time

Sie verwenden schrecklich alt Datum-Zeit-Klassen, die jetzt Vermächtnis sind, die von den java.time Klassen verdrängte.

Die LocalDate Klasse stellt ein Datum-only-Wert ohne Time-of-Tag und ohne Zeitzone.

Eine Zeitzone ist entscheidend, ein Datum zu bestimmen. Für jeden gegebenen Moment ändert sich das Datum auf der ganzen Welt durch Zone. Zum Beispiel, ein paar Minuten nach Mitternacht in Paris Frankreich ist ein neuer Tag, während nach wie vor „ gestern“in Montréal Québec .

Geben Sie eine rel="nofollow richtige Zeitzone Namen im Format continent/region wie America/Montreal , Africa/Casablanca oder Pacific/Auckland. Verwenden Sie niemals die 3-4 Buchstaben-Abkürzung wie EST oder IST, wie sie sind nicht true Zeitzonen, nicht standardisiert, und nicht einmal eindeutig (!).

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

mit einem Monat umgehen, extrahiert eine Month enum-Objekt. Das Gleiche gilt für Tag-of-Woche, DayOfWeek .

Anruf getDisplayName. Übergeben Sie einen TextStyle Abkürzung. Pass einen Locale zu bestimmen, (a) die menschliche Sprache für die Übersetzung des Namens des Tages, Name des Monats, und so, und (b) die kulturellen Normen Fragen der Abkürzung, Großschreibung, Zeichensetzung, Separatoren, und eine solche Entscheidung. Beachten Sie, dass Locale hat nichts mit Zeitzone zu tun.

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

... und ...

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

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

über java.time

Die java.time Rahmen in Java 8 gebaut und später. Diese Klassen verdrängen die störenden alten Vermächtnis Datum Zeitklassen rel="nofollow wie java.util.Date , Calendar & SimpleDateFormat .

Die Joda-Time Projekt jetzt in < einhref = "https://en.wikipedia.org/wiki/Maintenance_mode" rel = "nofollow noreferrer"> Wartungsmodus , rät Migration auf die java.time Klassen.

Um mehr zu erfahren, finden Sie in der Oracle Tutorial . Und Stack-Überlauf suchen viele Beispiele und Erklärungen. Spezifikation JSR 310 .

Mit einem JDBC-Treiber Einhaltung JDBC 4.2 oder später, können Sie java.time Objekte direkt mit Ihrer Datenbank auszutauschen. Keine Notwendigkeit für Strings oder java.sql. * Klassen.

Wo die java.time Klassen erhalten?

Das ThreeTen-Extra Projekt erstreckt java.time mit zusätzlichen Klassen. Dieses Projekt ist eine Bewährungsprobe für eine mögliche zukünftige Ergänzungen java.time. Sie können einige nützliche Klassen hier wie Interval YearWeek , YearQuarter und mehr .

ich habe ein Problem jetzt, wo ein Satz mit „dimanche 07 mars“ beginnt, die keine Rolle, wenn es nicht am Anfang eines Satzes sind. Ich denke, das kann nicht geändert werden, es sei denn, ich auf dem ersten Zeichen des Strings manuell String-Manipulation zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top