lunedì 21 settembre 2009

Recuperare i nomi dei mesi/giorni nelle varie localizzazioni

Le localizzazioni delle stringhe relative alle date sono gestite dalla classe DateFormatSymbols.
Tramite metodi come getMonths o getWeekdays è possibile recuperare i valori che vengono poi utilizzati nella formattazione delle date.

DateFormatSymbols dfs = new DateFormatSymbols(Locale.ITALIAN);
String[] monthNames = dfs.getMonths();
for (String month : monthNames) {
 System.out.println(month);
}

L'output sarà:
gennaio
febbraio
marzo
aprile
maggio
giugno
luglio
agosto
settembre
ottobre
novembre
dicembre

Si deve fare particolare attenzione alle lettere maiuscole/minuscole delle stringhe restituite, che seguiranno la convenzione della lingua selezionata. Ad esempio in italiano i nomi dei mesi e dei giorni sono dei nomi comuni ed hanno l'iniziale minuscola (gennaio, febbraio, ...) mentre in inglese i nomi iniziano con la lettera maiuscola (January, February, ...).

Un'altra particolarità, dovuta alle stranezze della classe Calendar, sono gli array di stringhe restituiti: nel caso dei mesi l'array ha 12 elementi che hanno indici da 0 a 11; nel caso dei giorni della settimana invece l'array ha 8 elementi, con il primo elemento, quello con indice 0, contenente una stringa vuota, gli elementi successivi contengono i nomi dei giorni della settimana, a partire dalla domenica.
Qual è la causa di questa anomalia?
Questi array vengono acceduti utilizzando come indici le costanti della classe Calendar, quindi l'anomalia dell'array dei nomi dei giorni è dovuta al fatto che mentre le costanti che rappresentano i mesi partono da 0 (Calendar.JANUARY == 0), le costanti che identificano i giorni della settimana partono da 1 (Calendar.SUNDAY == 1).

DateFormatSymbols dfs = new DateFormatSymbols(Locale.ITALIAN);
String[] weekdays = dfs.getWeekdays();
for (int i = 0; i < weekdays.length; i++) {
 System.out.println(i + " " + weekdays[i]);
}
Visualizza
0 
1 domenica
2 lunedì
3 martedì
4 mercoledì
5 giovedì
6 venerdì
7 sabato

Vedi anche:
DateFormatSymbols

Nessun commento:

Posta un commento