Ich muss unvollständiges Datum nur in Monatsgenauigkeit formatieren. Meine erste Vermutung war, das Muster "MMMM yyyy" darauf anzuwenden. Dies funktioniert für viele Gebietsschemas (Englisch, Deutsch, ...) gut, ergibt aber ein unschönes Ergebnis für Sprachen mit Flexion, z. Russisch. Ich las documentation of SimpleDateFormat
und fand, dass 'L' kontextunempfindlichen Monatsnamen geben soll: genau was ich brauche, da es keinen Tag des Monats im Muster gibt. Also habe ich stattdessen das Muster "LLLL yyyy" ausprobiert. Es funktioniert perfekt für russische und andere Flexionssprachen, aber versagt z. Englisch und Deutsch ...Eigenständige Form des Monatsnamens im Java-Datumsformat
Hier ist der Testcode:
import java.text.*;
import java.util.*;
public class test
{
public static void main (String[] arguments) throws Exception
{
for (String locale : new String[] { "en", "de", "hu", "it", "ru", "fi", "pl" })
System.out.format ("%s: %s \t%s\n", locale,
new SimpleDateFormat ("MMMM yyyy", new Locale (locale)).format (new Date()),
new SimpleDateFormat ("LLLL yyyy", new Locale (locale)).format (new Date()));
}
}
und seine Ausgabe:
en: September 2015 0009 2015
de: September 2015 0009 2015
hu: szeptember 2015 szeptember 2015
it: settembre 2015 Settembre 2015
ru: сентября 2015 Сентябрь 2015
fi: syyskuuta 2015 syyskuu 2015
pl: września 2015 wrzesień 2015
Also, für die getesteten locales: 'de' und 'de' Arbeit richtig nur mit 'M', 'hu' geht es gut mit 'M' und 'L', 'es ist wahrscheinlich besser dran mit' L '(weiß nicht, wie wichtig der Großbuchstabe hier ist), während' ru ', "fi" und "pl" geben die korrekte Ausgabe nur mit "L" (das kann ich wirklich nur für Russisch und Polnisch sagen, aber ich nehme an, dass es auf Finnisch ähnlich ist).
Fragen:
Kann ich etwas tun
SimpleDateFormat
oder eine ähnliche Datumsformatierung Klasse treat ‚L‘ für alle Gegenden richtig zu machen?Oder gibt es eine einfache Möglichkeit zu sagen, ob 'M' oder 'L' für ein bestimmtes Gebietsschema verwendet werden soll?
Ich spreche kein Russisch, aber sagst du, dass "M" Bezeichner einen falschen Monatsnamen gibt? Was ist der Bedeutungsunterschied zwischen 'сентября' und 'Сентябрь'? – Tunaki
Wie in Finnisch. Der Name des Monats ist syyskuu. Aber wenn ein Tag erwähnt wird, muss es sein: 15. syyskuuta (das ist die Bedeutung von Standalone-Form vs. kontextsensitiv). –
Welche Version von Java 8 verwenden Sie? Das 'L' wurde nur in Java 8 eingeführt, und auf meiner Maschine erzeugt Ihr Programm" September "für' en' und 'de'. Vielleicht haben Sie eine Version mit veralteten Locale-Dateien? – RealSkeptic