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