Den Namen des Nominativmonats in jodaTime erhalten

8

Ich muss den Monatsnamen entsprechend seiner Nummer in verschiedenen Locales erhalten.

Dafür erstelle ich ein DateTime (oder YearMonth , ist egal) -Objekt und bekomme seine monthOfYear Eigenschaft:

%Vor%

Die Sache ist, dass das für die englische Sprache gut funktioniert, weil Nominativ- und Genitivnamen gleich sind, aber für andere Sprachen gibt es nur Genitiv zurück, was ich nicht brauche.

Wie bekomme ich den Nominativnamen?

    
troy 19.05.2014, 13:57
quelle

2 Antworten

3

Es gab eine signifikante (rückwärtskompatible!) Änderung in der Art, in der Monatsnamen in Java 7 und Java 8 lokalisiert werden.

Dies bezieht sich auf die neue API java.time ( Tutorial ) eingeführt von Java 8. Die API unterscheidet (ziemlich vernünftig) zwei verschiedene Formen von a Monatsname, wie von java.time.format.TextStyle enum :

  • Standalone , der den Monatsnamen darstellt, wie er ist. Es entspricht dem "Nominativ" in vielen Sprachen.
  • Standard , das normalerweise in vollständigen Datumsdarstellungen verwendet wird. Dies entspricht dem "Genitiv".

Die Standardvariante für Datumsformatierer ist "Standard", was auch sinnvoll erscheint, da Formatier typischerweise zur Erstellung vollständiger Daten verwendet werden. Leider führte dies (zumindest für einige Sprachen) zu einer Verhaltensänderung zwischen Java 7 (das früher eigenständige Namen produzierte) und Java 8 (das einen "Standardnamen" erzeugt).

Es ist möglich, explizit nach dem Standalone- / Nominativformular zu fragen, indem Sie die oben genannte TextStyle Aufzählung verwenden. Leider macht dies Ihren Code von Java 8 oder höher abhängig.

Schnelle Demo:

%Vor%

Welche Drucke:

%Vor%

Ich kenne keinen einfachen Weg, um das Standalone-Formular zu bekommen, das sowohl unter Java 7 als auch unter Java 8 funktionieren würde. Zumindest nicht in reinem Java - natürlich gibt es einige komplizierte und zerbrechlichere Wege, wie den Versuch Erkennung der Java-Version oder Verwendung einer Drittanbieter-Bibliothek.

    
Marwin 24.10.2016, 12:07
quelle
6

Ich denke, Sie verwechseln Genitiv mit Nominativ. Wenn ich den folgenden Code ausführen:

%Vor%

Ich bekomme folgendes Ergebnis:

%Vor%

Was ist, für meine russischen Kenntnisse :) Nominativ. Sie müssen wahrscheinlich Genitiv bekommen, aber ich bezweifle, dass Joda das unterstützt. Sie können es selbst implementieren, sehen Sie sich diese Frage an: Monatsname im Genitiv (polnisches Gebietsschema) mit Joda-Time DateTimeFormatter

    
Marcin Szawurski 24.08.2014 11:10
quelle

Tags und Links