Internalizzazione Java - Guida rapida
Interiorizzazione
L'internalizzazione o I18N si riferisce alla capacità di un'applicazione di essere in grado di servire gli utenti in più e diverse lingue. Java ha il supporto integrato per l'internalizzazione. Java fornisce anche la formattazione di numeri, valute e la regolazione di data e ora di conseguenza.
Java Internationalization aiuta a fare in modo che un'applicazione java gestisca diverse lingue, formati di numeri, valute, formattazione dell'ora specifica della regione.
Localizzazione
La localizzazione o L10N è l'adattabilità di un'applicazione, ovvero il modo in cui un'applicazione si adatta con una lingua specifica, formati numerici, impostazioni di data e ora, ecc.
Un'applicazione java dovrebbe essere internazionalizzata per essere in grado di localizzarsi.
Informazioni culturalmente dipendenti
Le seguenti voci di informazioni spesso variano a seconda dei fusi orari o delle culture.
Messages
Date
Time
Number
Currency
Measurements
Numeri di telefono
Indirizzi postali
Etichette GUI
Classi di internazionalizzazione
Java ha una serie di classi incorporate che aiutano nell'internazionalizzazione di un'applicazione. Queste classi sono le seguenti:
Sr.No. | Classe e descrizione |
---|---|
1 | Locale Rappresenta una lingua insieme al paese / regione. |
2 | ResourceBundle Contiene testo o oggetti localizzati. |
3 | NumberFormat Utilizzare per formattare numeri / valute secondo le impostazioni internazionali. |
4 | DecimalFormat Utilizzare per formattare i numeri in base al formato personalizzato e in base alle impostazioni internazionali. |
5 | DateFormat Utilizzare per formattare le date in base alle impostazioni internazionali. |
6 | SimpleDateFormat Utilizzare per formattare le date in base al formato personalizzato e in base alle impostazioni internazionali. |
Internalizzazione Java - Configurazione dell'ambiente
In questo capitolo discuteremo i diversi aspetti della configurazione di un ambiente congeniale per Java.
Configurazione dell'ambiente locale
Se sei ancora disposto a configurare il tuo ambiente per il linguaggio di programmazione Java, questa sezione ti guiderà su come scaricare e configurare Java sulla tua macchina. Di seguito sono riportati i passaggi per configurare l'ambiente.
Java SE è disponibile gratuitamente dal collegamento Scarica Java . Puoi scaricare una versione basata sul tuo sistema operativo.
Segui le istruzioni per scaricare Java ed eseguire il file .exeper installare Java sulla tua macchina. Una volta installato Java sulla macchina, sarà necessario impostare le variabili di ambiente in modo che puntino alle directory di installazione corrette -
Configurazione del percorso per Windows
Supponendo che tu abbia installato Java nella directory c: \ Program Files \ java \ jdk -
Fare clic con il tasto destro del mouse su "Risorse del computer" e selezionare "Proprietà".
Fare clic sul pulsante "Variabili d'ambiente" nella scheda "Avanzate".
Ora, modifica la variabile "Path" in modo che contenga anche il percorso dell'eseguibile Java. Ad esempio, se il percorso è attualmente impostato su "C: \ WINDOWS \ SYSTEM32", modificare il percorso in "C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin".
Configurazione del percorso per Linux, UNIX, Solaris, FreeBSD
La variabile d'ambiente PATH dovrebbe essere impostata in modo che punti a dove sono stati installati i binari Java. Fare riferimento alla documentazione della shell, se si hanno problemi a farlo.
Esempio, se usi bash come shell, aggiungi la seguente riga alla fine di '.bashrc: export PATH = / path / to / java: $ PATH'
Editor Java popolari
Per scrivere i tuoi programmi Java, avrai bisogno di un editor di testo. Sul mercato sono disponibili IDE ancora più sofisticati. Ma per ora, puoi considerare uno dei seguenti:
Notepad - Su macchina Windows, puoi utilizzare qualsiasi semplice editor di testo come Blocco note (consigliato per questo tutorial), TextPad.
Netbeans - Un IDE Java che è open-source e gratuito che può essere scaricato da https://www.netbeans.org/index.html.
Eclipse - Un IDE Java sviluppato dalla comunità open source di eclipse e può essere scaricato da https://www.eclipse.org/.
Cosa c'è dopo?
Il prossimo capitolo ti insegnerà come scrivere ed eseguire il tuo primo programma Java e alcune delle importanti sintassi di base in Java necessarie per lo sviluppo di applicazioni.
Internalizzazione Java - Classe locale
Un oggetto Locale rappresenta una regione geografica / politica / culturale specifica. Qualsiasi operazione che richiede una Locale per eseguire la sua attività è chiamata operazione sensibile alla locale e utilizza la Locale per acquisire informazioni relative all'utente. Ad esempio, la visualizzazione di un numero è un'operazione sensibile alle impostazioni internazionali. Il numero deve essere formattato secondo le usanze e le convenzioni del paese, della regione o della cultura nativa dell'utente.
Contenuti locali
Un oggetto Locale contiene quanto segue:
Language- Codice della lingua ISO 639 alpha-2 o alpha-3 o sottotag della lingua registrata fino a 8 lettere alfabetiche. Il codice alpha-2 deve essere utilizzato se sono presenti sia il codice alpha-2 che il codice alfa-3. Il campo della lingua non fa distinzione tra maiuscole e minuscole, ma Locale canonicalizza sempre in minuscolo.
Script- Codice script ISO 15924 alpha-4. Il campo dello script non fa distinzione tra maiuscole e minuscole, ma Locale canonicalizza sempre in maiuscolo e minuscolo.
Country (region)- Codice ISO 3166 alfa-2 del paese o codice UN M.49 numerico-3 dell'area. Il campo del paese non fa distinzione tra maiuscole e minuscole, ma Locale canonicalizza sempre in maiuscolo.
Variant- Qualsiasi valore arbitrario utilizzato per indicare una variazione di una locale. Dove sono presenti due o più valori varianti, ciascuno dei quali indica la propria semantica, questi valori dovrebbero essere ordinati per importanza, con i più importanti per primi, separati da un trattino basso ('_'). Il campo della variante fa distinzione tra maiuscole e minuscole.
Extensions- Una mappa dalle chiavi di un singolo carattere ai valori di stringa, indicando le estensioni oltre all'identificazione della lingua. Le estensioni in Locale implementano la semantica e la sintassi dei sottotag di estensione BCP 47 e dei sottotag per uso privato. Le estensioni non fanno distinzione tra maiuscole e minuscole, ma Locale canonicalizza tutte le chiavi di estensione e i valori in minuscolo.
Internalizzazione Java - Esempio - Dettagli locali
In questo esempio, otterremo la localizzazione predefinita e ne stamperemo i dettagli. Quindi creare una locale per "fr" e stampare i suoi dettagli.
I18NTester.java
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale locale =Locale.getDefault();
System.out.println("Default Locale Properties:\n");
System.out.println(locale.getDisplayCountry());
System.out.println(locale.getDisplayLanguage());
System.out.println(locale.getDisplayName());
System.out.println(locale.getISO3Country());
System.out.println(locale.getISO3Language());
System.out.println(locale.getLanguage());
System.out.println(locale.getCountry());
Locale frenchLocale = new Locale("fr","fr");
System.out.println("\nfr Locale Properties:\n");
System.out.println(frenchLocale.getDisplayCountry());
System.out.println(frenchLocale.getDisplayLanguage());
System.out.println(frenchLocale.getDisplayName());
System.out.println(frenchLocale.getISO3Country());
System.out.println(frenchLocale.getISO3Language());
System.out.println(frenchLocale.getLanguage());
System.out.println(frenchLocale.getCountry());
}
}
Produzione
Stamperà il seguente risultato.
Default Locale Properties:
United States
English
English (United States)
USA
eng
en
US
fr Locale Properties:
France
French
French (France)
FRA
fra
fr
FR
Internalizzazione Java - Esempio - Lingua di visualizzazione
In questo esempio, otterremo la lingua di visualizzazione per locale passata come argomento.
I18NTester.java
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale defaultLocale = Locale.getDefault();
Locale enLocale = new Locale("en", "US");
Locale frLocale = new Locale("fr", "FR");
Locale esLocale = new Locale("es", "ES");
System.out.println(defaultLocale.getDisplayLanguage(enLocale));
System.out.println(defaultLocale.getDisplayLanguage(frLocale));
System.out.println(defaultLocale.getDisplayLanguage(esLocale));
}
}
Produzione
Stamperà il seguente risultato.
English
anglais
inglés
Internalizzazione Java - Classe ResourceBundle
La classe ResourceBundle viene utilizzata per archiviare testo e oggetti sensibili alle impostazioni locali. In genere utilizziamo file di proprietà per memorizzare testo specifico della locale e quindi rappresentarli utilizzando l'oggetto ResourceBundle. Di seguito sono riportati i passaggi per utilizzare il file delle proprietà specifico della locale in un'applicazione basata su Java.
Passaggio 1: crea i file delle proprietà.
Supponiamo di aver bisogno del file delle proprietà per la locale inglese. Quindi creare un nome file delle proprietà XXX_en_US.properties dove XXX è il nome del file ed en_US rappresenta la locale per l'inglese (USA).
Messages_en_US.properties
message=Welcome to TutorialsPoint.COM!
Creiamo ora il file delle proprietà per la locale francese. Quindi creare un nome file delle proprietà XXX_fr_FR.properties dove XXX è il nome del file e fr_FR rappresenta la locale per il francese (Francia).
Messages_fr_FR.properties
message=Bienvenue sur TutorialsPoint.COM!
Qui puoi capire che la chiave è la stessa ma il valore è specifico della locale in entrambi i file delle proprietà.
Passaggio 2: creare l'oggetto ResourceBundle
Crea un oggetto ResourceBundle con il nome del file delle proprietà e le impostazioni internazionali utilizzando la seguente sintassi.
ResourceBundle bundle = ResourceBundle.getBundle("Messages", Locale.US);
Passaggio 3: ottenere il valore dall'oggetto ResourceBundle.
Ottieni il valore dall'oggetto ResourceBundle passando la chiave.
String value = bundle.getString("message");
Esempio
L'esempio seguente illustra l'uso degli oggetti ResourceBundle per visualizzare valori specifici della locale dai file delle proprietà.
IOTester.java
import java.util.Locale;
import java.util.ResourceBundle;
public class I18NTester {
public static void main(String[] args) {
ResourceBundle bundle = ResourceBundle.getBundle("Messages", Locale.US);
System.out.println("Message in "+Locale.US +": "+bundle.getString("message"));
bundle = ResourceBundle.getBundle("Messages", Locale.FRANCE);
System.out.println("Message in "+Locale.FRANCE +": "+bundle.getString("message"));
}
}
Produzione
Stamperà il seguente risultato.
Message in en_US: Welcome to TutorialsPoint.COM!
Message in fr_FR: Bienvenue sur TutorialsPoint.COM!
Note per le convenzioni di denominazione
Di seguito sono riportate le convenzioni di denominazione per il file delle proprietà.
Per i file delle proprietà mappati alla locale predefinita, nessun prefisso è obbligatorio. message_en_US.properties è equivalente a message.properties.
Per il file delle proprietà mappato alla locale, il prefisso può essere allegato in due modi. message_fr.properties è equivalente a message_fr_FR.properties.
Internalizzazione Java - Classe NumberFormat
La classe java.text.NumberFormat viene utilizzata per formattare numeri e valute secondo una specifica Locale. I formati dei numeri variano da paese a paese. Ad esempio, in Danimarca le frazioni di un numero sono separate dalla parte intera usando una virgola mentre in Inghilterra usano un punto come separatore.
Esempio: formattare i numeri
In questo esempio, formattiamo i numeri in base alle impostazioni internazionali statunitensi e danesi.
IOTester.java
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale enLocale = new Locale("en", "US");
Locale daLocale = new Locale("da", "DK");
NumberFormat numberFormat = NumberFormat.getInstance(daLocale);
System.out.println(numberFormat.format(100.76));
numberFormat = NumberFormat.getInstance(enLocale);
System.out.println(numberFormat.format(100.76));
}
}
Produzione
Stamperà il seguente risultato.
100,76
100.76
Internalizzazione Java - Formato valute
In questo esempio, formattiamo le valute in base alle impostazioni internazionali statunitensi e danesi.
IOTester.java
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale enLocale = new Locale("en", "US");
Locale daLocale = new Locale("da", "DK");
NumberFormat numberFormat = NumberFormat.getCurrencyInstance(daLocale);
System.out.println(numberFormat.format(100.76));
numberFormat = NumberFormat.getCurrencyInstance(enLocale);
System.out.println(numberFormat.format(100.76));
}
}
Produzione
Stamperà il seguente risultato.
kr 100,76
$100.76
Internalizzazione Java - Percentuali di formato
In questo esempio, stiamo formattando i numeri in formato percentuale.
IOTester.java
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale enLocale = new Locale("en", "US");
NumberFormat numberFormat = NumberFormat.getPercentInstance(enLocale);
System.out.println(numberFormat.format(0.76));
}
}
Produzione
Stamperà il seguente risultato.
76%
Internalizzazione Java - Imposta precisione min / max
In questo esempio, stiamo impostando le cifre min e max sia per la parte intera che per la parte frazionaria di un numero.
IOTester.java
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale enLocale = new Locale("en", "US");
NumberFormat numberFormat = NumberFormat.getInstance(enLocale);
numberFormat.setMinimumIntegerDigits(2);
numberFormat.setMaximumIntegerDigits(3);
numberFormat.setMinimumFractionDigits(2);
numberFormat.setMaximumFractionDigits(3);
System.out.println(numberFormat.format(12234.763443));
}
}
Produzione
Stamperà il seguente risultato.
234.763
Internalizzazione Java - Imposta modalità di arrotondamento
In questo esempio, stiamo mostrando la modalità di arrotondamento.
IOTester.java
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale enLocale = new Locale("en", "US");
NumberFormat numberFormat = NumberFormat.getInstance(enLocale);
numberFormat.setMinimumFractionDigits(0);
numberFormat.setMaximumFractionDigits(0);
System.out.println(numberFormat.format(99.50));
numberFormat.setRoundingMode(RoundingMode.HALF_DOWN);
System.out.println(numberFormat.format(99.50));
}
}
Produzione
Stamperà il seguente risultato.
100
99
Internalizzazione Java - Analisi dei numeri
In questo esempio, stiamo mostrando l'analisi del numero presente in diverse impostazioni internazionali.
IOTester.java
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) throws ParseException {
Locale enLocale = new Locale("en", "US");
Locale daLocale = new Locale("da", "DK");
NumberFormat numberFormat = NumberFormat.getInstance(daLocale);
System.out.println(numberFormat.parse("100,76"));
numberFormat = NumberFormat.getInstance(enLocale);
System.out.println(numberFormat.parse("100,76"));
}
}
Produzione
Stamperà il seguente risultato.
100.76
10076
Internalizzazione Java - Classe DecimalFormat
La classe java.text.DecimalFormat viene utilizzata per formattare i numeri in base al formato personalizzato e in base alle impostazioni locali.
Esempio: formattare i numeri
In questo esempio, formattiamo i numeri in base a un determinato modello.
IOTester.java
import java.text.DecimalFormat;
public class I18NTester {
public static void main(String[] args) {
String pattern = "####,####.##";
double number = 123456789.123;
DecimalFormat numberFormat = new DecimalFormat(pattern);
System.out.println(number);
System.out.println(numberFormat.format(number));
}
}
Produzione
Stamperà il seguente risultato.
1.23456789123E8
1,2345,6789.12
Internalizzazione Java - Pattern di formato
Segue l'uso dei caratteri nei modelli di formattazione.
Sr.No. | Classe e descrizione |
---|---|
1 | 0 Per visualizzare 0 se sono presenti meno cifre. |
2 | # Per visualizzare la cifra che impegna gli zeri iniziali. |
3 | . Separatore decimale. |
4 | , Separatore di raggruppamento. |
5 | E Mantissa e separatore esponente per i formati esponenziali. |
6 | ; Separatore di formato. |
7 | - Prefisso numero negativo. |
8 | % Mostra il numero come percentuale dopo aver moltiplicato per 100. |
9 | ? Mostra il numero come mille dopo aver moltiplicato per 1000. |
10 | X Per contrassegnare il carattere come prefisso / suffisso numerico. |
11 | ' Per contrassegnare le virgolette attorno a caratteri speciali. |
In questo esempio, formattiamo i numeri in base a modelli diversi.
IOTester.java
import java.text.DecimalFormat;
public class I18NTester {
public static void main(String[] args) {
String pattern = "###.###";
double number = 123456789.123;
DecimalFormat numberFormat = new DecimalFormat(pattern);
System.out.println(number);
//pattern ###.###
System.out.println(numberFormat.format(number));
//pattern ###.#
numberFormat.applyPattern("###.#");
System.out.println(numberFormat.format(number));
//pattern ###,###.##
numberFormat.applyPattern("###,###.##");
System.out.println(numberFormat.format(number));
number = 9.34;
//pattern 000.###
numberFormat.applyPattern("000.##");
System.out.println(numberFormat.format(number));
}
}
Produzione
Stamperà il seguente risultato.
1.23456789123E8
1,2345,6789.12
Internalizzazione Java - Formato decimale specifico per le impostazioni locali
Per impostazione predefinita, l'oggetto DecimalFormat utilizza la locale della JVM. È possibile modificare l'impostazione locale predefinita durante la creazione dell'oggetto DecimalFormat utilizzando la classe NumberFormat. Nell'esempio seguente, utilizzeremo lo stesso modello per due impostazioni locali diverse e puoi individuare la differenza nell'output.
IOTester.java
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
String pattern = "###.##";
double number = 123.45;
Locale enlocale = new Locale("en", "US");
Locale dalocale = new Locale("da", "DK");
DecimalFormat decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(enlocale);
decimalFormat.applyPattern(pattern);
System.out.println(decimalFormat.format(number));
decimalFormat = (DecimalFormat) NumberFormat.getNumberInstance(dalocale);
decimalFormat.applyPattern(pattern);
System.out.println(decimalFormat.format(number));
}
}
Produzione
Stamperà il seguente risultato.
123.45
123,45
Internalizzazione Java - Classe DecimalFormatSymbols
Utilizzando la classe DecimalFormatSymbols, è possibile modificare i simboli separatori predefiniti, i simboli separatori di raggruppamento, ecc. L'esempio seguente illustra lo stesso.
IOTester.java
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
public class I18NTester {
public static void main(String[] args) {
String pattern = "#,###.###";
double number = 126473.4567;
DecimalFormat decimalFormat = new DecimalFormat(pattern);
System.out.println(decimalFormat.format(number));
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator(';');
decimalFormatSymbols.setGroupingSeparator(':');
decimalFormat = new DecimalFormat(pattern, decimalFormatSymbols);
System.out.println(decimalFormat.format(number));
}
}
Produzione
Stamperà il seguente risultato.
126,473.457
126:473;457
Internalizzazione Java - Raggruppamento di cifre
Utilizzando il metodo setGroupingSize () di DecimalFormat, è possibile modificare il raggruppamento predefinito dei numeri. L'esempio seguente illustra lo stesso.
IOTester.java
import java.text.DecimalFormat;
public class I18NTester {
public static void main(String[] args) {
double number = 121223232473.4567;
DecimalFormat decimalFormat = new DecimalFormat();
System.out.println(number);
System.out.println(decimalFormat.format(number));
decimalFormat.setGroupingSize(4);
System.out.println(decimalFormat.format(number));
}
}
Produzione
Stamperà il seguente risultato.
1.212232324734567E11
121,223,232,473.457
1212,2323,2473.457
Internalizzazione Java - Classe DateFormat
java.text.DateFormat formatta le date in base alle impostazioni locali. Poiché diversi paesi utilizzano formati diversi per visualizzare le date. Questa classe è estremamente utile nella gestione delle date nell'interiorizzazione dell'applicazione. L'esempio seguente mostra come creare e utilizzare la classe DateFormat.
IOTester.java
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) {
Locale locale = new Locale("da","DK");
DateFormat dateFormat = DateFormat.getDateInstance();
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
System.out.println(dateFormat.format(new Date()));
}
}
Produzione
Stamperà il seguente risultato.
Nov 29, 2017
29-11-2017
Internalizzazione Java - Formattazione delle date
La classe DateFormat fornisce vari formati per formattare la data. Di seguito è riportato un elenco di alcuni formati.
DateFormat.DEFAULT
DateFormat.SHORT
DateFormat.MEDIUM
DateFormat.LONG
DateFormat.FULL
Nell'esempio seguente mostreremo come utilizzare diversi formati.
IOTester.java
import java.text.DateFormat;
import java.util.Date;
public class I18NTester {
public static void main(String[] args) {
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateInstance(DateFormat.SHORT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateInstance(DateFormat.LONG);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateInstance(DateFormat.FULL);
System.out.println(dateFormat.format(new Date()));
}
}
Produzione
Stamperà il seguente risultato.
Nov 29, 2017
11/29/17
Nov 29, 2017
November 29, 2017
Wednesday, November 29, 2017
Internalizzazione Java - Tempo di formattazione
La classe DateFormat fornisce vari formati per formattare l'ora. Utilizzare il metodo DateFormat.getTimeInstance (). Vedi l'esempio sotto.
Nell'esempio seguente mostreremo come utilizzare diversi formati per formattare l'ora.
IOTester.java
import java.text.DateFormat;
import java.util.Date;
public class I18NTester {
public static void main(String[] args) {
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getTimeInstance(DateFormat.SHORT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getTimeInstance(DateFormat.LONG);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getTimeInstance(DateFormat.FULL);
System.out.println(dateFormat.format(new Date()));
}
}
Produzione
Stamperà il seguente risultato.
4:11:21 PM
4:11 PM
4:11:21 PM
4:11:21 PM IST
4:11:21 PM IST
Internalizzazione Java - Formattazione di data e ora
La classe DateFormat fornisce vari formati per formattare la data e l'ora insieme. Utilizzare il metodo DateFormat.getDateTimeInstance (). Vedi l'esempio sotto.
Nell'esempio seguente mostreremo come utilizzare diversi formati per formattare data e ora.
IOTester.java
import java.text.DateFormat;
import java.util.Date;
public class I18NTester {
public static void main(String[] args) {
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG);
System.out.println(dateFormat.format(new Date()));
dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
System.out.println(dateFormat.format(new Date()));
}
}
Produzione
Stamperà il seguente risultato.
Nov 29, 2017 4:16:13 PM
11/29/17 4:16 PM
Nov 29, 2017 4:16:13 PM
November 29, 2017 4:16:13 PM IST
Wednesday, November 29, 2017 4:16:13 PM IST
Internalizzazione Java - Classe SimpleDateFormat
java.text.SimpleDateFormat formatta le date secondo il modello fornito. Viene anche utilizzato per analizzare le date da una stringa in cui la stringa contiene la data nel formato indicato. Vedere il seguente esempio di utilizzo della classe SimpleDateFormat.
IOTester.java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class I18NTester {
public static void main(String[] args) throws ParseException {
String pattern = "dd-MM-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = new Date();
System.out.println(date);
System.out.println(simpleDateFormat.format(date));
String dateText = "29-11-2017";
date = simpleDateFormat.parse(dateText);
System.out.println(simpleDateFormat.format(date));
}
}
Produzione
Stamperà il seguente risultato.
Wed Nov 29 17:01:22 IST 2017
29-11-2017
29-11-2017
Internalizzazione Java: SimpleDateFormat specifico per le impostazioni locali
Le impostazioni locali possono essere utilizzate per creare una formattazione specifica delle impostazioni internazionali su un modello nella classe SimpleDateFormat. Vedere il seguente esempio di utilizzo della classe SimpleDateFormat specifica della locale.
IOTester.java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class I18NTester {
public static void main(String[] args) throws ParseException {
Locale locale = new Locale("da", "DK");
String pattern = "EEEEE MMMMM yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = new Date();
System.out.println(date);
System.out.println(simpleDateFormat.format(date));
simpleDateFormat = new SimpleDateFormat(pattern,locale);
System.out.println(simpleDateFormat.format(date));
}
}
Produzione
Stamperà il seguente risultato.
Wed Nov 29 17:48:14 IST 2017
Wednesday November 2017
onsdag november 2017
Internalizzazione Java - Classe DecimalFormatSymbols
Utilizzando la classe DecimalFormatSymbols, è possibile modificare i simboli separatori predefiniti, i simboli separatori di raggruppamento, ecc. L'esempio seguente illustra lo stesso.
IOTester.java
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
public class I18NTester {
public static void main(String[] args) {
String pattern = "#,###.###";
double number = 126473.4567;
DecimalFormat decimalFormat = new DecimalFormat(pattern);
System.out.println(decimalFormat.format(number));
DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
decimalFormatSymbols.setDecimalSeparator(';');
decimalFormatSymbols.setGroupingSeparator(':');
decimalFormat = new DecimalFormat(pattern, decimalFormatSymbols);
System.out.println(decimalFormat.format(number));
}
}
Produzione
Stamperà il seguente risultato.
126,473.457
126:473;457
Internalizzazione Java - Modelli di formato data
Segue l'uso di caratteri nei modelli di formattazione della data.
Sr.No. | Classe e descrizione |
---|---|
1 | G Per visualizzare Era. |
2 | y Per visualizzare l'anno. Valori validi yy, yyyy. |
3 | M Per visualizzare il mese. Valori validi MM, MMM o MMMMM. |
4 | d Per visualizzare il giorno del mese. Valori validi d, dd. |
5 | h Per visualizzare l'ora del giorno (1-12 AM / PM). Valore valido hh. |
6 | H Per visualizzare l'ora del giorno (0-23). Valore valido HH. |
7 | m Per visualizzare i minuti dell'ora (0-59). Valore valido mm. |
8 | s Per visualizzare i secondi del minuto (0-59). Valore valido ss. |
9 | S Per visualizzare i millisecondi dei minuti (0-999). Valore valido SSS. |
10 | E Per visualizzare il giorno nella settimana (ad esempio lunedì, martedì ecc.) |
11 | D Per visualizzare il giorno nell'anno (1-366). |
12 | F Per visualizzare il giorno della settimana nel mese (es. 1 ° giovedì di dicembre). |
13 | w Per visualizzare la settimana nell'anno (1-53). |
14 | W Per visualizzare la settimana nel mese (0-5) |
15 | a Per visualizzare AM / PM |
16 | k Per visualizzare l'ora nel giorno (1-24). |
17 | K Per visualizzare l'ora nel giorno, AM / PM (0-11). |
18 | z Per visualizzare il fuso orario. |
In questo esempio, formattiamo le date in base a modelli diversi.
IOTester.java
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class I18NTester {
public static void main(String[] args) throws ParseException {
String pattern = "dd-MM-yy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = new Date();
System.out.println(simpleDateFormat.format(date));
pattern = "MM-dd-yyyy";
simpleDateFormat = new SimpleDateFormat(pattern);
System.out.println(simpleDateFormat.format(date));
pattern = "yyyy-MM-dd HH:mm:ss";
simpleDateFormat = new SimpleDateFormat(pattern);
System.out.println(simpleDateFormat.format(date));
pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
simpleDateFormat = new SimpleDateFormat(pattern);
System.out.println(simpleDateFormat.format(date));
}
}
Produzione
Stamperà il seguente risultato.
29-11-17
11-29-2017
2017-11-29 18:47:42
Wednesday November 2017 18:47:42.787+0530
Internalizzazione Java - UTC
UTC sta per Co-Ordined Universal Time. È lo standard temporale ed è comunemente usato in tutto il mondo. Tutti i fusi orari vengono calcolati in modo comparativo con UTC come offset. Ad esempio, l'ora a Copenaghen, in Danimarca, è UTC + 1 significa ora UTC più un'ora. È indipendente dal risparmio di luce diurna e deve essere utilizzato per memorizzare la data e l'ora nei database.
Conversione dei fusi orari
L'esempio seguente mostrerà la conversione di vari fusi orari. Stamperemo l'ora del giorno e l'ora in millisecondi. Il primo varierà e il secondo rimarrà lo stesso.
IOTester.java
import java.text.ParseException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
public class I18NTester {
public static void main(String[] args) throws ParseException {
Calendar date = new GregorianCalendar();
date.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
date.set(Calendar.HOUR_OF_DAY, 12);
System.out.println("UTC: " + date.get(Calendar.HOUR_OF_DAY));
System.out.println("UTC: " + date.getTimeInMillis());
date.setTimeZone(TimeZone.getTimeZone("Europe/Copenhagen"));
System.out.println("CPH: " + date.get(Calendar.HOUR_OF_DAY));
System.out.println("CPH: " + date.getTimeInMillis());
date.setTimeZone(TimeZone.getTimeZone("America/New_York"));
System.out.println("NYC: " + date.get(Calendar.HOUR_OF_DAY));
System.out.println("NYC: " + date.getTimeInMillis());
}
}
Produzione
Stamperà il seguente risultato.
UTC: 12
UTC: 1511956997540
CPH: 13
CPH: 1511956997540
NYC: 7
NYC: 1511956997540
Fusi orari disponibili
L'esempio seguente mostrerà i fusi orari disponibili con il sistema.
IOTester.java
import java.text.ParseException;
import java.util.TimeZone;
public class I18NTester {
public static void main(String[] args) throws ParseException {
String[] availableIDs = TimeZone.getAvailableIDs();
for(String id : availableIDs) {
System.out.println("Timezone = " + id);
}
}
}
Produzione
Stamperà il seguente risultato.
Timezone = Africa/Abidjan
Timezone = Africa/Accra
...
Timezone = VST
Internalizzazione Java - Conversione Unicode da / a String
In java, il testo viene archiviato internamente in formato Unicode. Se input / output è in un formato diverso, è necessaria la conversione.
Conversione
L'esempio seguente mostrerà la conversione di una stringa Unicode in byte UTF8 [] e byte UTF8 [] in byte Unicode [].
IOTester.java
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.text.ParseException;
public class I18NTester {
public static void main(String[] args) throws ParseException, UnsupportedEncodingException {
String unicodeString = "\u00C6\u00D8\u00C5" ;
//convert Unicode to UTF8 format
byte[] utf8Bytes = unicodeString.getBytes(Charset.forName("UTF-8"));
printBytes(utf8Bytes, "UTF 8 Bytes");
//convert UTF8 format to Unicode
String converted = new String(utf8Bytes, "UTF8");
byte[] unicodeBytes = converted.getBytes();
printBytes(unicodeBytes, "Unicode Bytes");
}
public static void printBytes(byte[] array, String name) {
for (int k = 0; k < array.length; k++) {
System.out.println(name + "[" + k + "] = " + array[k]);
}
}
}
Produzione
Stamperà il seguente risultato.
UTF 8 Bytes[0] = -61
UTF 8 Bytes[1] = -122
UTF 8 Bytes[2] = -61
UTF 8 Bytes[3] = -104
UTF 8 Bytes[4] = -61
UTF 8 Bytes[5] = -123
Unicode Bytes[0] = -58
Unicode Bytes[1] = -40
Unicode Bytes[2] = -59
Internalizzazione Java - Conversione Unicode da / a Reader / Writer
Le classi Reader e Writer sono classi stream orientate ai caratteri. Questi possono essere usati per leggere e convertire i caratteri Unicode.
Conversione
L'esempio seguente mostrerà la conversione di una stringa Unicode in byte UTF8 [] e byte UTF8 [] in byte Unicode [] utilizzando le classi Reader e Writer.
IOTester.java
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.nio.charset.Charset;
import java.text.ParseException;
public class I18NTester {
public static void main(String[] args) throws ParseException, IOException {
String input = "This is a sample text" ;
InputStream inputStream = new ByteArrayInputStream(input.getBytes());
//get the UTF-8 data
Reader reader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));
//convert UTF-8 to Unicode
int data = reader.read();
while(data != -1){
char theChar = (char) data;
System.out.print(theChar);
data = reader.read();
}
reader.close();
System.out.println();
//Convert Unicode to UTF-8 Bytes
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Writer writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8"));
writer.write(input);
writer.close();
String out = new String(outputStream.toByteArray());
System.out.println(out);
}
}
Produzione
Stamperà il seguente risultato.
This is a sample text
This is a sample text
Stampa