Internalización de Java - Guía rápida
Internalización
Internalización o I18N se refiere a la capacidad de una Aplicación para poder servir a los usuarios en múltiples y diferentes idiomas. Java tiene soporte incorporado para internalización. Java también proporciona formato de números, monedas y ajuste de fecha y hora en consecuencia.
La internacionalización de Java ayuda a que una aplicación de Java maneje diferentes idiomas, formatos de números, monedas y formato de hora específico de la región.
Localización
La localización o L10N es la adaptabilidad de una aplicación, es decir, cómo una aplicación se adapta a un idioma específico, formatos de números, configuraciones de fecha y hora, etc.
Una aplicación java debe internacionalizarse para poder localizarse.
Información culturalmente dependiente
Los siguientes elementos de información a menudo varían según las diferentes zonas horarias o culturas.
Messages
Date
Time
Number
Currency
Measurements
Números de teléfono
Direcciones postales
Etiquetas GUI
Clases de internacionalización
Java tiene un conjunto de clases integradas que ayudan en la internacionalización de una aplicación. Estas clases son las siguientes:
No Señor. | Clase y descripción |
---|---|
1 | Locale Representa un idioma junto con el país / región. |
2 | ResourceBundle Contiene texto u objetos localizados. |
3 | NumberFormat Úselo para formatear números / monedas según la configuración regional. |
4 | DecimalFormat Úselo para formatear números según el formato personalizado y según la configuración regional. |
5 | DateFormat Úselo para dar formato a las fechas según la configuración regional. |
6 | SimpleDateFormat Úselo para formatear fechas según el formato personalizado y según la configuración regional. |
Internalización de Java: configuración del entorno
En este capítulo, discutiremos los diferentes aspectos de la configuración de un entorno agradable para Java.
Configuración del entorno local
Si todavía está dispuesto a configurar su entorno para el lenguaje de programación Java, esta sección lo guía sobre cómo descargar y configurar Java en su máquina. Los siguientes son los pasos para configurar el entorno.
Java SE está disponible gratuitamente desde el enlace Descargar Java . Puede descargar una versión basada en su sistema operativo.
Siga las instrucciones para descargar Java y ejecutar el .exepara instalar Java en su máquina. Una vez que haya instalado Java en su máquina, deberá configurar las variables de entorno para que apunten a los directorios de instalación correctos:
Configuración de la ruta para Windows
Suponiendo que haya instalado Java en el directorio c: \ Archivos de programa \ java \ jdk -
Haga clic derecho en 'Mi PC' y seleccione 'Propiedades'.
Haga clic en el botón 'Variables de entorno' en la pestaña 'Avanzado'.
Ahora, modifique la variable 'Ruta' para que también contenga la ruta al ejecutable de Java. Por ejemplo, si la ruta está configurada actualmente en 'C: \ WINDOWS \ SYSTEM32', cambie su ruta para que lea 'C: \ WINDOWS \ SYSTEM32; c: \ Archivos de programa \ java \ jdk \ bin'.
Configuración de la ruta para Linux, UNIX, Solaris, FreeBSD
La variable de entorno PATH debe establecerse para que apunte a dónde se han instalado los binarios de Java. Consulte la documentación de su shell, si tiene problemas para hacer esto.
Por ejemplo, si usa bash como su shell, entonces agregaría la siguiente línea al final de su '.bashrc: export PATH = / path / to / java: $ PATH'
Editores populares de Java
Para escribir sus programas Java, necesitará un editor de texto. Hay IDE aún más sofisticados disponibles en el mercado. Pero por ahora, puede considerar uno de los siguientes:
Notepad - En una máquina con Windows, puede usar cualquier editor de texto simple como el Bloc de notas (recomendado para este tutorial), TextPad.
Netbeans - Un IDE de Java que es de código abierto y gratuito que se puede descargar desde https://www.netbeans.org/index.html.
Eclipse - Un IDE de Java desarrollado por la comunidad de código abierto eclipse y se puede descargar desde https://www.eclipse.org/.
¿Lo que sigue?
El próximo capítulo le enseñará cómo escribir y ejecutar su primer programa Java y algunas de las sintaxis básicas importantes en Java necesarias para desarrollar aplicaciones.
Internalización de Java - Clase de configuración regional
Un objeto Locale representa una región geográfica / política / cultural específica. Cualquier operación que requiera que un entorno local realice su tarea se denomina operación sensible al entorno local y utiliza el entorno local para dominar la información relativa al usuario. Por ejemplo, mostrar un número es una operación que depende de la configuración regional. El número debe tener el formato de las costumbres y convenciones del país, región o cultura nativa del usuario.
Contenido de la configuración regional
Un objeto Locale contiene lo siguiente:
Language- Código de idioma ISO 639 alpha-2 o alpha-3, o subetiquetas de idioma registrado de hasta 8 letras alfabéticas. Se debe usar el código alpha-2 si están presentes tanto el código alpha-2 como el alpha-3. El campo de idioma no distingue entre mayúsculas y minúsculas, pero Locale siempre se canoniza a minúsculas.
Script- Código de script ISO 15924 alpha-4. El campo de secuencia de comandos no distingue entre mayúsculas y minúsculas, pero Locale siempre se canoniza al título.
Country (region)- Código de país ISO 3166 alfa-2 o código de área UN M.49 numérico-3. El campo del país no distingue entre mayúsculas y minúsculas, pero Locale siempre se canoniza a mayúsculas.
Variant- Cualquier valor arbitrario utilizado para indicar una variación de una configuración regional. Cuando hay dos o más valores variantes, cada uno de los cuales indica su propia semántica, estos valores deben ordenarse por importancia, con los más importantes primero, separados por un guión bajo ('_'). El campo de variantes distingue entre mayúsculas y minúsculas.
Extensions- Un mapa de claves de un solo carácter a valores de cadena, indicando extensiones además de la identificación del idioma. Las extensiones en Locale implementan la semántica y la sintaxis de las subetiquetas de extensión BCP 47 y las subetiquetas de uso privado. Las extensiones no distinguen entre mayúsculas y minúsculas, pero Locale canonicaliza todas las claves y valores de extensión a minúsculas.
Internalización de Java - Ejemplo - Detalles de la configuración regional
En este ejemplo, obtendremos la configuración regional predeterminada e imprimiremos sus detalles. Luego cree una configuración regional para "fr" e imprima sus detalles.
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());
}
}
Salida
Imprimirá el siguiente 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
Internalización de Java - Ejemplo - Lenguaje de visualización
En este ejemplo, obtendremos el idioma de visualización por configuración regional pasada como 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));
}
}
Salida
Imprimirá el siguiente resultado.
English
anglais
inglés
Internalización de Java - Clase ResourceBundle
La clase ResourceBundle se usa para almacenar texto y objetos que son sensibles a la configuración regional. Generalmente usamos archivos de propiedades para almacenar texto específico de la configuración regional y luego representarlos usando el objeto ResourceBundle. Los siguientes son los pasos para usar el archivo de propiedades específicas de la configuración regional en una aplicación basada en Java.
Paso 1: crear archivos de propiedades.
Supongamos que necesitamos un archivo de propiedades para la configuración regional en inglés. A continuación, cree un nombre de archivo de propiedades XXX_en_US.properties donde XXX es el nombre del archivo y en_US representa la configuración regional para inglés (EE. UU.).
Messages_en_US.properties
message=Welcome to TutorialsPoint.COM!
Creemos ahora un archivo de propiedades para la configuración regional francesa. A continuación, cree un nombre de archivo de propiedades XXX_fr_FR.properties donde XXX es el nombre del archivo y fr_FR representa la configuración regional para francés (Francia).
Messages_fr_FR.properties
message=Bienvenue sur TutorialsPoint.COM!
Aquí puede averiguar que la clave es la misma, pero el valor es específico de la configuración regional en ambos archivos de propiedades.
Paso 2: Crear objeto ResourceBundle
Cree el objeto ResourceBundle con el nombre del archivo de propiedades y la configuración regional utilizando la siguiente sintaxis.
ResourceBundle bundle = ResourceBundle.getBundle("Messages", Locale.US);
Paso 3: Obtenga el valor del objeto ResourceBundle.
Obtenga el valor del objeto ResourceBundle pasando la clave.
String value = bundle.getString("message");
Ejemplo
El siguiente ejemplo ilustra el uso de objetos ResourceBundle para mostrar valores específicos de la configuración regional de los archivos de propiedades.
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"));
}
}
Salida
Imprimirá el siguiente resultado.
Message in en_US: Welcome to TutorialsPoint.COM!
Message in fr_FR: Bienvenue sur TutorialsPoint.COM!
Notas para las convenciones de nomenclatura
A continuación se muestran las convenciones de nomenclatura para el archivo de propiedades.
Para el archivo de propiedades asignado a la configuración regional predeterminada, no es obligatorio ningún prefijo. message_en_US.properties es equivalente a message.properties.
Para el archivo de propiedades asignado a la configuración regional, el prefijo se puede adjuntar de dos maneras. message_fr.properties es equivalente a message_fr_FR.properties.
Internalización de Java - Clase NumberFormat
La clase java.text.NumberFormat se utiliza para formatear números y monedas según una configuración regional específica. Los formatos numéricos varían de un país a otro. Por ejemplo, en Dinamarca las fracciones de un número se separan de la parte entera usando una coma, mientras que en Inglaterra usan un punto como separador.
Ejemplo: formato de números
En este ejemplo, estamos formateando números según la configuración regional de EE. UU. Y la configuración regional danesa.
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));
}
}
Salida
Imprimirá el siguiente resultado.
100,76
100.76
Internalización de Java: formato de monedas
En este ejemplo, estamos formateando monedas según la configuración regional de EE. UU. Y la configuración regional danesa.
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));
}
}
Salida
Imprimirá el siguiente resultado.
kr 100,76
$100.76
Internalización de Java - Porcentajes de formato
En este ejemplo, estamos formateando números en formato de porcentaje.
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));
}
}
Salida
Imprimirá el siguiente resultado.
76%
Internalización de Java - Establecer precisión mínima / máxima
En este ejemplo, estamos configurando dígitos mínimos y máximos tanto para el entero como para la parte fraccionaria de un 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));
}
}
Salida
Imprimirá el siguiente resultado.
234.763
Internalización de Java: establecer el modo de redondeo
En este ejemplo, mostramos el modo de redondeo.
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));
}
}
Salida
Imprimirá el siguiente resultado.
100
99
Internalización de Java: análisis de números
En este ejemplo, mostramos el análisis de números presentes en diferentes configuraciones regionales.
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"));
}
}
Salida
Imprimirá el siguiente resultado.
100.76
10076
Internalización de Java - Clase DecimalFormat
La clase java.text.DecimalFormat se utiliza para formatear números según el formato personalizado y según la configuración regional.
Ejemplo: formato de números
En este ejemplo, estamos formateando números según un patrón determinado.
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));
}
}
Salida
Imprimirá el siguiente resultado.
1.23456789123E8
1,2345,6789.12
Internalización de Java - Patrones de formato
Lo siguiente es el uso de caracteres en patrones de formato.
No Señor. | Clase y descripción |
---|---|
1 | 0 Para mostrar 0 si hay menos dígitos presentes. |
2 | # Para mostrar dígitos omitiendo ceros iniciales. |
3 | . Separador decimal. |
4 | , Separador de agrupamiento. |
5 | E Separador de mantisa y exponente para formatos exponenciales. |
6 | ; Separador de formato. |
7 | - Prefijo de número negativo. |
8 | % Muestra el número como porcentaje después de multiplicar por 100. |
9 | ? Muestra el número como mil después de multiplicar por 1000. |
10 | X Para marcar un carácter como prefijo / sufijo numérico. |
11 | ' Para marcar comillas alrededor de caracteres especiales. |
En este ejemplo, estamos formateando números basados en diferentes patrones.
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));
}
}
Salida
Imprimirá el siguiente resultado.
1.23456789123E8
1,2345,6789.12
Internalización de Java: formato decimal específico de la configuración regional
De forma predeterminada, el objeto DecimalFormat utiliza la configuración regional de la JVM. Podemos cambiar la configuración regional predeterminada mientras creamos el objeto DecimalFormat usando la clase NumberFormat. En el siguiente ejemplo, usaremos el mismo patrón para dos configuraciones regionales diferentes y puede detectar la diferencia en la salida.
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));
}
}
Salida
Imprimirá el siguiente resultado.
123.45
123,45
Internalización de Java - Clase DecimalFormatSymbols
Usando la clase DecimalFormatSymbols, se pueden cambiar los símbolos separadores predeterminados, los símbolos separadores de agrupación, etc. El siguiente ejemplo ilustra lo mismo.
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));
}
}
Salida
Imprimirá el siguiente resultado.
126,473.457
126:473;457
Internalización de Java: agrupación de dígitos
Usando el método setGroupingSize () de DecimalFormat, se puede cambiar la agrupación predeterminada de números. El siguiente ejemplo ilustra lo mismo.
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));
}
}
Salida
Imprimirá el siguiente resultado.
1.212232324734567E11
121,223,232,473.457
1212,2323,2473.457
Internalización de Java - Clase DateFormat
La clase java.text.DateFormat da formato a las fechas según la configuración regional. Como los diferentes países utilizan diferentes formatos para mostrar las fechas. Esta clase es extremadamente útil para tratar las fechas en la internalización de la aplicación. El siguiente ejemplo muestra cómo crear y usar la clase 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()));
}
}
Salida
Imprimirá el siguiente resultado.
Nov 29, 2017
29-11-2017
Internalización de Java: formato de fechas
La clase DateFormat proporciona varios formatos para formatear la fecha. A continuación se muestra una lista de algunos de los formatos.
DateFormat.DEFAULT
DateFormat.SHORT
DateFormat.MEDIUM
DateFormat.LONG
DateFormat.FULL
En el siguiente ejemplo mostraremos cómo usar diferentes formatos.
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()));
}
}
Salida
Imprimirá el siguiente resultado.
Nov 29, 2017
11/29/17
Nov 29, 2017
November 29, 2017
Wednesday, November 29, 2017
Internalización de Java: tiempo de formato
La clase DateFormat proporciona varios formatos para formatear la hora. Se utilizará el método DateFormat.getTimeInstance (). Vea el ejemplo a continuación.
En el siguiente ejemplo, mostraremos cómo usar diferentes formatos para formatear la 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()));
}
}
Salida
Imprimirá el siguiente resultado.
4:11:21 PM
4:11 PM
4:11:21 PM
4:11:21 PM IST
4:11:21 PM IST
Internalización de Java: formateo de fecha y hora
La clase DateFormat proporciona varios formatos para formatear la fecha y la hora juntas. Se utilizará el método DateFormat.getDateTimeInstance (). Vea el ejemplo a continuación.
En el siguiente ejemplo, mostraremos cómo usar diferentes formatos para formatear la fecha y la 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()));
}
}
Salida
Imprimirá el siguiente 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
Internalización de Java - Clase SimpleDateFormat
La clase java.text.SimpleDateFormat formatea las fechas según el patrón dado. También se utiliza para analizar las fechas de una cadena donde la cadena contiene la fecha en el formato mencionado. Vea el siguiente ejemplo de uso de la clase 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));
}
}
Salida
Imprimirá el siguiente resultado.
Wed Nov 29 17:01:22 IST 2017
29-11-2017
29-11-2017
Internalización de Java: SimpleDateFormat específico de la configuración regional
La configuración regional se puede utilizar para crear un formato específico de la configuración regional sobre un patrón en la clase SimpleDateFormat. Vea el siguiente ejemplo del uso de la clase SimpleDateFormat específica de la configuración regional.
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));
}
}
Salida
Imprimirá el siguiente resultado.
Wed Nov 29 17:48:14 IST 2017
Wednesday November 2017
onsdag november 2017
Internalización de Java - Clase DecimalFormatSymbols
Usando la clase DecimalFormatSymbols, se pueden cambiar los símbolos separadores predeterminados, los símbolos separadores de agrupación, etc. El siguiente ejemplo ilustra lo mismo.
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));
}
}
Salida
Imprimirá el siguiente resultado.
126,473.457
126:473;457
Internalización de Java - Patrones de formato de fecha
Lo siguiente es el uso de caracteres en patrones de formato de fecha.
No Señor. | Clase y descripción |
---|---|
1 | G Para mostrar Era. |
2 | y Para mostrar el año. Valores válidos yy, yyyy. |
3 | M Para mostrar el mes. Valores válidos MM, MMM o MMMMM. |
4 | d Para mostrar el día del mes. Valores válidos d, dd. |
5 | h Para mostrar la hora del día (1-12 AM / PM). Valor válido hh. |
6 | H Para mostrar la hora del día (0-23). Valor válido HH. |
7 | m Para mostrar los minutos de la hora (0-59). Valor válido mm. |
8 | s Para mostrar el segundo del minuto (0-59). Valor válido ss. |
9 | S Para mostrar milisegundos de minuto (0-999). Valor válido SSS. |
10 | E Para mostrar el día de la semana (p. Ej., Lunes, martes, etc.) |
11 | D Para mostrar el día del año (1-366). |
12 | F Para mostrar el día de la semana en el mes (por ejemplo, el primer jueves de diciembre). |
13 | w Para mostrar la semana del año (1-53). |
14 | W Para mostrar la semana en el mes (0-5) |
15 | a Para mostrar AM / PM |
dieciséis | k Para mostrar la hora del día (1-24). |
17 | K Para mostrar la hora del día, AM / PM (0-11). |
18 | z Para mostrar la zona horaria. |
En este ejemplo, estamos formateando fechas en función de diferentes patrones.
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));
}
}
Salida
Imprimirá el siguiente resultado.
29-11-17
11-29-2017
2017-11-29 18:47:42
Wednesday November 2017 18:47:42.787+0530
Internalización de Java - UTC
UTC significa Hora Universal Coordinada. Es estándar de tiempo y se usa comúnmente en todo el mundo. Todas las zonas horarias se calculan comparativamente con UTC como compensación. Por ejemplo, la hora en Copenhague, Dinamarca es UTC + 1, lo que significa la hora UTC más una hora. Es independiente del horario de verano y debe usarse para almacenar la fecha y la hora en bases de datos.
Conversión de husos horarios
El siguiente ejemplo mostrará la conversión de varias zonas horarias. Imprimiremos la hora del día y la hora en milisegundos. El primero variará y el segundo seguirá siendo el mismo.
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());
}
}
Salida
Imprimirá el siguiente resultado.
UTC: 12
UTC: 1511956997540
CPH: 13
CPH: 1511956997540
NYC: 7
NYC: 1511956997540
Zonas horarias disponibles
El siguiente ejemplo mostrará las zonas horarias disponibles con el 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);
}
}
}
Salida
Imprimirá el siguiente resultado.
Timezone = Africa/Abidjan
Timezone = Africa/Accra
...
Timezone = VST
Internalización de Java - Conversión Unicode de / a String
En java, el texto se almacena internamente en formato Unicode. Si la entrada / salida tiene un formato diferente, se requiere conversión.
Conversión
El siguiente ejemplo mostrará la conversión de una cadena Unicode a un byte UTF8 [] y un byte UTF8 [] a un 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]);
}
}
}
Salida
Imprimirá el siguiente 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
Internalización de Java - Conversión Unicode de / a Reader / Writer
Las clases Reader y Writer son clases de flujo orientadas a caracteres. Estos se pueden utilizar para leer y convertir caracteres Unicode.
Conversión
El siguiente ejemplo mostrará la conversión de una cadena Unicode a un byte UTF8 [] y un byte UTF8 [] a un byte Unicode [] utilizando las clases Reader y 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);
}
}
Salida
Imprimirá el siguiente resultado.
This is a sample text
This is a sample text
Impresión