Internalização Java - Guia rápido
Internalização
Internalização ou I18N refere-se à capacidade de um Aplicativo de servir aos usuários em vários e diferentes idiomas. Java tem suporte integrado para internalização. Java também fornece formatação de números, moedas e ajuste de data e hora de acordo.
A internacionalização Java ajuda a fazer um aplicativo java lidar com diferentes linguagens, formatos de números, moedas, formatação de hora específica de região.
Localização
Localização ou L10N é a adaptabilidade de um aplicativo que é como um aplicativo se adapta a um idioma específico, formatos de número, configurações de data e hora, etc.
Um aplicativo java deve ser internacionalizado para ser capaz de se localizar.
Informações culturalmente dependentes
Os itens de informações a seguir geralmente variam com os diferentes fusos horários ou culturas.
Messages
Date
Time
Number
Currency
Measurements
Números de telefone
Endereços postais
Rótulos GUI
Aulas de internacionalização
Java possui um conjunto de classes integradas que auxiliam na internacionalização de uma aplicação. Essas classes são as seguintes:
Sr. Não. | Classe e descrição |
---|---|
1 | Locale Representa um idioma junto com o país / região. |
2 | ResourceBundle Contém texto ou objetos localizados. |
3 | NumberFormat Use para formatar números / moedas de acordo com o local. |
4 | DecimalFormat Use para formatar números de acordo com o formato personalizado e de acordo com a localidade. |
5 | DateFormat Use para formatar datas de acordo com o local. |
6 | SimpleDateFormat Use para formatar datas de acordo com o formato personalizado e de acordo com a localidade. |
Internalização Java - configuração do ambiente
Neste capítulo, discutiremos os diferentes aspectos da configuração de um ambiente adequado para Java.
Configuração de ambiente local
Se você ainda deseja configurar seu ambiente para a linguagem de programação Java, esta seção o orienta sobre como fazer download e configurar o Java em sua máquina. A seguir estão as etapas para configurar o ambiente.
Java SE está disponível gratuitamente no link Download Java . Você pode baixar uma versão com base em seu sistema operacional.
Siga as instruções para baixar o Java e executar o .exepara instalar o Java em sua máquina. Depois de instalar o Java em sua máquina, você precisará definir as variáveis de ambiente para apontar para os diretórios de instalação corretos -
Configurando o caminho para o Windows
Supondo que você tenha instalado o Java no diretório c: \ Arquivos de programas \ java \ jdk -
Clique com o botão direito em 'Meu Computador' e selecione 'Propriedades'.
Clique no botão 'Variáveis de ambiente' na guia 'Avançado'.
Agora, altere a variável 'Path' para que também contenha o caminho para o executável Java. Por exemplo, se o caminho está definido atualmente para 'C: \ WINDOWS \ SYSTEM32', altere seu caminho para 'C: \ WINDOWS \ SYSTEM32; c: \ Arquivos de programas \ java \ jdk \ bin'.
Configurando o caminho para Linux, UNIX, Solaris, FreeBSD
A variável de ambiente PATH deve ser definida para apontar para onde os binários Java foram instalados. Consulte a documentação do shell, se tiver problemas para fazer isso.
Por exemplo, se você usar bash como seu shell, então você adicionaria a seguinte linha ao final de seu '.bashrc: export PATH = / path / to / java: $ PATH'
Editores Java populares
Para escrever seus programas Java, você precisará de um editor de texto. Existem IDEs ainda mais sofisticados disponíveis no mercado. Mas, por enquanto, você pode considerar um dos seguintes -
Notepad - Na máquina Windows, você pode usar qualquer editor de texto simples como o Notepad (recomendado para este tutorial), TextPad.
Netbeans - Um IDE Java que é de código aberto e gratuito, que pode ser baixado de https://www.netbeans.org/index.html.
Eclipse - Um IDE Java desenvolvido pela comunidade de código aberto eclipse e pode ser baixado de https://www.eclipse.org/.
O que vem a seguir?
O próximo capítulo ensinará como escrever e executar seu primeiro programa Java e algumas das importantes sintaxes básicas em Java necessárias para o desenvolvimento de aplicativos.
Internalização Java - classe local
Um objeto Locale representa uma região geográfica / política / cultural específica. Qualquer operação que requeira um Locale para realizar sua tarefa é chamada de operação com distinção de local e usa o Locale para dominar as informações relativas ao usuário. Por exemplo, exibir um número é uma operação que diferencia o local. O número deve ser formatado de acordo com os costumes e convenções do país, região ou cultura de origem do usuário.
Conteúdo local
Um objeto Locale contém o seguinte:
Language- Código de idioma ISO 639 alpha-2 ou alpha-3, ou subtags de idioma registrado com até 8 letras alfa. O código alfa-2 deve ser usado se os códigos alfa-2 e alfa-3 estiverem presentes. O campo de idioma não diferencia maiúsculas de minúsculas, mas Locale sempre canoniza para minúsculas.
Script- Código de script ISO 15924 alfa-4. O campo de script não diferencia maiúsculas de minúsculas, mas Locale sempre canoniza para maiúsculas e minúsculas.
Country (region)- código de país ISO 3166 alfa-2 ou código de área UN M.49 numérico-3. O campo do país não diferencia maiúsculas de minúsculas, mas Locale sempre canoniza para maiúsculas.
Variant- Qualquer valor arbitrário usado para indicar uma variação de um Local. Onde houver dois ou mais valores variantes, cada um indicando sua própria semântica, esses valores devem ser ordenados por importância, com o mais importante primeiro, separado por sublinhado ('_'). O campo variante diferencia maiúsculas de minúsculas.
Extensions- Um mapa de chaves de um único caractere para valores de string, indicando extensões além da identificação do idioma. As extensões no Locale implementam a semântica e a sintaxe das subetiquetas de extensão BCP 47 e subetiquetas de uso privado. As extensões não diferenciam maiúsculas de minúsculas, mas Locale canoniza todas as chaves e valores de extensão para minúsculas.
Internalização Java - Exemplo - Detalhes de localidade
Neste exemplo, obteremos a localidade padrão e imprimiremos seus detalhes. Em seguida, crie um local para "fr" e imprima seus detalhes.
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());
}
}
Resultado
Irá imprimir o seguinte resultado.
Default Locale Properties:
United States
English
English (United States)
USA
eng
en
US
fr Locale Properties:
France
French
French (France)
FRA
fra
fr
FR
Internalização Java - Exemplo - Linguagem de exibição
Neste exemplo, obteremos o idioma de exibição por localidade passado como um argumento.
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));
}
}
Resultado
Irá imprimir o seguinte resultado.
English
anglais
inglés
Internalização Java - classe ResourceBundle
A classe ResourceBundle é usada para armazenar texto e objetos que são sensíveis ao local. Geralmente usamos arquivos de propriedade para armazenar texto específico do local e, em seguida, representá-los usando o objeto ResourceBundle. A seguir estão as etapas para usar o arquivo de propriedades específicas do código do idioma em um aplicativo baseado em java.
Etapa 1: Criar arquivos de propriedades.
Suponha que precisamos do arquivo de propriedades para o local em inglês. Em seguida, crie um nome de arquivo de propriedades XXX_en_US.properties em que XXX é o nome do arquivo e en_US representa o código do idioma para inglês (EUA).
Messages_en_US.properties
message=Welcome to TutorialsPoint.COM!
Vamos agora criar um arquivo de propriedades para o local francês. Em seguida, crie um nome de arquivo de propriedades XXX_fr_FR.properties em que XXX é o nome do arquivo e fr_FR representa o código do idioma para francês (França).
Messages_fr_FR.properties
message=Bienvenue sur TutorialsPoint.COM!
Aqui você pode descobrir que a chave é a mesma, mas o valor é específico da localidade em ambos os arquivos de propriedades.
Etapa 2: crie o objeto ResourceBundle
Crie o objeto ResourceBundle com o nome do arquivo de propriedades e local usando a seguinte sintaxe.
ResourceBundle bundle = ResourceBundle.getBundle("Messages", Locale.US);
Etapa 3: obtenha o valor do objeto ResourceBundle.
Obtenha o valor do objeto ResourceBundle passando a chave.
String value = bundle.getString("message");
Exemplo
O exemplo a seguir ilustra o uso de objetos ResourceBundle para exibir valores específicos de local a partir de arquivos de propriedades.
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"));
}
}
Resultado
Irá imprimir o seguinte resultado.
Message in en_US: Welcome to TutorialsPoint.COM!
Message in fr_FR: Bienvenue sur TutorialsPoint.COM!
Notas para convenções de nomenclatura
A seguir estão as convenções de nomenclatura para o arquivo de propriedades.
Para o arquivo de propriedades mapeado para o código do idioma padrão, nenhum prefixo é obrigatório. message_en_US.properties é equivalente a message.properties.
Para o arquivo de propriedades mapeado para o local, o prefixo pode ser anexado de duas maneiras. message_fr.properties é equivalente a message_fr_FR.properties.
Internalização Java - classe NumberFormat
A classe java.text.NumberFormat é usada para formatar números e moedas de acordo com um local específico. Os formatos de número variam de país para país. Por exemplo, na Dinamarca, as frações de um número são separadas da parte inteira por vírgula, enquanto na Inglaterra usam um ponto como separador.
Exemplo - Formatar números
Neste exemplo, formatamos números com base na localidade dos EUA e na localidade dinamarquesa.
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));
}
}
Resultado
Irá imprimir o seguinte resultado.
100,76
100.76
Internalização Java - formato de moedas
Neste exemplo, estamos formatando moedas com base na localidade dos EUA e na localidade dinamarquesa.
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));
}
}
Resultado
Irá imprimir o seguinte resultado.
kr 100,76
$100.76
Internalização Java - Porcentagens de formato
Neste exemplo, estamos formatando números em formato de porcentagem.
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));
}
}
Resultado
Irá imprimir o seguinte resultado.
76%
Internalização Java - Definir precisão mínima / máxima
Neste exemplo, estamos definindo dígitos mínimo e máximo para o inteiro e também para a parte fracionária de um número.
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));
}
}
Resultado
Irá imprimir o seguinte resultado.
234.763
Internalização Java - Definir modo de arredondamento
Neste exemplo, estamos apresentando o Modo de arredondamento.
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));
}
}
Resultado
Irá imprimir o seguinte resultado.
100
99
Internalização Java - análise de números
Neste exemplo, estamos mostrando a análise do número presente em diferentes localidades.
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"));
}
}
Resultado
Irá imprimir o seguinte resultado.
100.76
10076
Internalização Java - classe DecimalFormat
A classe java.text.DecimalFormat é usada para formatar números de acordo com o formato personalizado e de acordo com o local.
Exemplo - Formatar números
Neste exemplo, estamos formatando números com base em um determinado padrão.
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));
}
}
Resultado
Irá imprimir o seguinte resultado.
1.23456789123E8
1,2345,6789.12
Internalização Java - padrões de formato
A seguir está o uso de caracteres em padrões de formatação.
Sr. Não. | Classe e descrição |
---|---|
1 | 0 Exibir 0 se menos dígitos estiverem presentes. |
2 | # Para exibir o dígito omitindo os zeros à esquerda. |
3 | . Separador decimal. |
4 | , Separador de agrupamento. |
5 | E Mantissa e separador de expoentes para formatos exponenciais. |
6 | ; Separador de formato. |
7 | - Prefixo de número negativo. |
8 | % Mostra o número como porcentagem após a multiplicação por 100. |
9 | ? Mostra o número em mil após a multiplicação por 1000. |
10 | X Para marcar o caractere como um prefixo / sufixo numérico. |
11 | ' Para marcar citação em torno de caracteres especiais. |
Neste exemplo, formatamos números com base em padrões diferentes.
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));
}
}
Resultado
Irá imprimir o seguinte resultado.
1.23456789123E8
1,2345,6789.12
Internalização de Java - DecimalFormat específico de local
Por padrão, o objeto DecimalFormat está usando o locale da JVM. Podemos alterar a localidade padrão ao criar o objeto DecimalFormat usando a classe NumberFormat. No exemplo abaixo, usaremos o mesmo padrão para duas localidades diferentes e você pode identificar a diferença na saída.
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));
}
}
Resultado
Irá imprimir o seguinte resultado.
123.45
123,45
Internalização Java - classe DecimalFormatSymbols
Usando a classe DecimalFormatSymbols, os símbolos separadores padrão, símbolos separadores de agrupamento etc. podem ser alterados. O exemplo a seguir ilustra o mesmo.
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));
}
}
Resultado
Irá imprimir o seguinte resultado.
126,473.457
126:473;457
Internalização Java - Agrupando dígitos
Usando o método setGroupingSize () de DecimalFormat, o agrupamento padrão de números pode ser alterado. O exemplo a seguir ilustra o mesmo.
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));
}
}
Resultado
Irá imprimir o seguinte resultado.
1.212232324734567E11
121,223,232,473.457
1212,2323,2473.457
Internalização Java - classe DateFormat
A classe java.text.DateFormat formata datas de acordo com o local. Como países diferentes usam formatos diferentes para exibir datas. Essa classe é extremamente útil para lidar com datas na internalização de aplicativos. O exemplo a seguir mostra como criar e usar a 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()));
}
}
Resultado
Irá imprimir o seguinte resultado.
Nov 29, 2017
29-11-2017
Internalização Java - Datas de formatação
A classe DateFormat fornece vários formatos para formatar a data. A seguir está uma lista de alguns dos formatos.
DateFormat.DEFAULT
DateFormat.SHORT
DateFormat.MEDIUM
DateFormat.LONG
DateFormat.FULL
No exemplo a seguir, mostraremos como usar formatos diferentes.
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()));
}
}
Resultado
Irá imprimir o seguinte resultado.
Nov 29, 2017
11/29/17
Nov 29, 2017
November 29, 2017
Wednesday, November 29, 2017
Internalização Java - Tempo de formatação
A classe DateFormat fornece vários formatos para formatar a hora. O método DateFormat.getTimeInstance () deve ser usado. Veja o exemplo abaixo.
No exemplo a seguir, mostraremos como usar diferentes formatos para formatar a hora.
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()));
}
}
Resultado
Irá imprimir o seguinte resultado.
4:11:21 PM
4:11 PM
4:11:21 PM
4:11:21 PM IST
4:11:21 PM IST
Internalização Java - Formatando Data e Hora
A classe DateFormat fornece vários formatos para formatar a data e a hora juntas. O método DateFormat.getDateTimeInstance () deve ser usado. Veja o exemplo abaixo.
No exemplo a seguir, mostraremos como usar diferentes formatos para formatar data e hora.
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()));
}
}
Resultado
Irá imprimir o seguinte resultado.
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
Internalização Java - classe SimpleDateFormat
A classe java.text.SimpleDateFormat formata datas de acordo com o padrão fornecido. Ele também é usado para analisar datas de string em que string contém data no formato mencionado. Veja o seguinte exemplo de uso da 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));
}
}
Resultado
Irá imprimir o seguinte resultado.
Wed Nov 29 17:01:22 IST 2017
29-11-2017
29-11-2017
Internalização de Java - SimpleDateFormat específico do local
Locale pode ser usado para criar formatação específica de localidade sobre um padrão na classe SimpleDateFormat. Veja o seguinte exemplo de uso da classe SimpleDateFormat específica do local.
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));
}
}
Resultado
Irá imprimir o seguinte resultado.
Wed Nov 29 17:48:14 IST 2017
Wednesday November 2017
onsdag november 2017
Internalização Java - classe DecimalFormatSymbols
Usando a classe DecimalFormatSymbols, os símbolos separadores padrão, símbolos separadores de agrupamento etc. podem ser alterados. O exemplo a seguir ilustra o mesmo.
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));
}
}
Resultado
Irá imprimir o seguinte resultado.
126,473.457
126:473;457
Internalização Java - padrões de formato de data
A seguir está o uso de caracteres em padrões de formatação de data.
Sr. Não. | Classe e descrição |
---|---|
1 | G Para exibir Era. |
2 | y Para exibir o ano. Valores válidos yy, yyyy. |
3 | M Para exibir o mês. Valores válidos MM, MMM ou MMMMM. |
4 | d Para exibir o dia do mês. Valores válidos d, dd. |
5 | h Para exibir a hora do dia (1-12 AM / PM). Valor válido hh. |
6 | H Para exibir a hora do dia (0-23). Valor válido HH. |
7 | m Para exibir os minutos da hora (0-59). Valor válido mm. |
8 | s Para exibir os segundos do minuto (0-59). Valor válido ss. |
9 | S Para exibir milissegundos de minuto (0-999). Valor válido SSS. |
10 | E Para exibir o dia da semana (por exemplo, segunda, terça, etc.) |
11 | D Para exibir o dia no ano (1-366). |
12 | F Para exibir o dia da semana no mês (por exemplo, 1ª quinta-feira de dezembro). |
13 | w Para exibir a semana no ano (1-53). |
14 | W Para exibir a semana no mês (0-5) |
15 | a Para exibir AM / PM |
16 | k Para exibir a hora do dia (1-24). |
17 | K Para exibir a hora do dia, AM / PM (0-11). |
18 | z Para exibir o fuso horário. |
Neste exemplo, formatamos datas com base em padrões diferentes.
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));
}
}
Resultado
Irá imprimir o seguinte resultado.
29-11-17
11-29-2017
2017-11-29 18:47:42
Wednesday November 2017 18:47:42.787+0530
Internalização Java - UTC
UTC significa Tempo Universal Coordenado. É o padrão de tempo e é comumente usado em todo o mundo. Todos os fusos horários são calculados comparativamente com o UTC como compensação. Por exemplo, o horário em Copenhague, na Dinamarca, é UTC + 1, significa o horário UTC mais uma hora. É independente do horário de verão e deve ser usado para armazenar data e hora em bancos de dados.
Conversão de fusos horários
O exemplo a seguir mostrará a conversão de vários fusos horários. Imprimiremos a hora do dia e a hora em milissegundos. O primeiro irá variar e o segundo permanecerá o mesmo.
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());
}
}
Resultado
Irá imprimir o seguinte resultado.
UTC: 12
UTC: 1511956997540
CPH: 13
CPH: 1511956997540
NYC: 7
NYC: 1511956997540
Fusos horários disponíveis
O exemplo a seguir mostrará os fusos horários disponíveis com o 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);
}
}
}
Resultado
Irá imprimir o seguinte resultado.
Timezone = Africa/Abidjan
Timezone = Africa/Accra
...
Timezone = VST
Internalização Java - Conversão Unicode de / para String
Em java, o texto é armazenado internamente no formato Unicode. Se a entrada / saída estiver em um formato diferente, a conversão será necessária.
Conversão
O exemplo a seguir mostrará a conversão de uma String Unicode para byte UTF8 [] e byte UTF8 [] para 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]);
}
}
}
Resultado
Irá imprimir o seguinte resultado.
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
Internalização Java - Conversão Unicode de / para Leitor / Escritor
As classes Reader e Writer são classes de fluxo orientadas a caracteres. Eles podem ser usados para ler e converter caracteres Unicode.
Conversão
O exemplo a seguir mostrará a conversão de uma String Unicode em UTF8 byte [] e UTF8 byte [] em Unicode byte [] usando as classes 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);
}
}
Resultado
Irá imprimir o seguinte resultado.
This is a sample text
This is a sample text
Impressão