Ho bisogno di formattare la data incompleta solo al mese di precisione. La mia prima ipotesi è stata quella di applicare il modello "MMMM yyyy" ad esso. Questo funziona bene per molti locali (inglese, tedesco, ...), ma fornisce risultati brutti per le lingue con flessione, ad es. Russo. Ho letto documentation of SimpleDateFormat
e ho scoperto che "L" dovrebbe fornire un nome mese insensibile al contesto: proprio quello di cui ho bisogno, poiché non vi è alcun giorno del mese nel modello. Così ho provato invece il pattern "LLLL yyyy". Funziona perfettamente per il russo e altri linguaggi di flessione, ma invece fallisce per es. Inglese e tedesco ...Forma standalone del nome del mese in formato data Java
Ecco il codice di prova:
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()));
}
}
e la sua uscita:
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
Così, per i locali testati: 'it' e 'de' opera correttamente solo con 'M', 'hu' va bene sia con 'M' che con 'L', 'it' è probabilmente meglio con 'L' (non so quanto sia importante la maiuscola qui), mentre 'ru', 'fi' e 'pl' danno l'output corretto solo con 'L' (questo posso davvero dire solo per russo e polacco, ma presumo che sia simile in finlandese).
Domande:
Posso fare qualcosa per rendere
SimpleDateFormat
o un simile formattazione della data classe treat 'L' correttamente per tutte le lingue?In alternativa, c'è un modo semplice per dire se "M" o "L" dovrebbero essere usati per qualsiasi locale?
Non parlo russo ma stai dicendo che l'identificatore 'M' fornisce un nome mese errato? Qual è la differenza di significato tra "сентября" e "Сентябрь"? – Tunaki
Come in finlandese. Il nome del mese è syyskuu. Ma se c'è un giorno menzionato deve essere: 15. syyskuuta (che è il significato di forma standalone vs. sensibile al contesto). –
Quale versione di Java 8 stai usando? Il 'L' è stato introdotto solo in Java 8, e sulla mia macchina il tuo programma produce" September "anche per' en' e 'de'. Forse hai una versione con file locali obsoleti? – RealSkeptic