JDK Tutorials - Herong's Tutorial Examples - v6.32, by Herong Yang
Locale Sensitive Operations
This section provides a tutorial example on how to convert date objects to strings in different locales using java.util.SimpleDateFormat class.
Locale Sensitive Operations: Operations that require to know a user's locale in order to tailor information for the user. For example, formatting a calendar date into a string is a locale sensitive operation, because for an English speaking user in US, a calendar date should be formatted as "Mon Oct 21 20:54:05 EDT 2002"; but for a French speaking user, the same date should be formatted as "lun. oct. 21 20:54:05 EDT 2002".
Separated formatter classes are provided to handle locale sensitive operations related to some predefined classes. Here is a list of formatter classes:
Formatter Class Data Class Operations ---------------- ----------------- ---------------------- SimpleDateFormat GregorianCalendar Formatting and parsing DecimalFormat Number Formatting and parsing
The following program shows how to internationalize the formatting operation of dates, numbers and currencies:
/* FormatLocaleTest.java * Copyright (c) HerongYang.com. All Rights Reserved. */ import java.util.*; import java.text.*; class FormatLocaleTest { public static void main(String[] a) { showDateFormat(); showNumberFormat(); } public static void showDateFormat() { Date now = new Date(); // the current time DateFormat df; SimpleDateFormat sdf; System.out.println("Default date format:"); df = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG); System.out.println(" Locale(Default): " + df.format(now)); df = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.FRANCE); System.out.println(" Locale(France): " + df.format(now)); df = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.FRENCH); System.out.println(" Locale(French): " + df.format(now)); df = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.GERMAN); System.out.println(" Locale(German): " + df.format(now)); System.out.println("Customized date format:"); sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy"); System.out.println(" Locale(Default): " + sdf.format(now)); sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.FRENCH); System.out.println(" Locale(French): " + sdf.format(now)); sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.GERMAN); System.out.println(" Locale(German): " + sdf.format(now)); sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.CHINESE); System.out.println(" Locale(Chinese): " + sdf.format(now)); } public static void showNumberFormat() { double num = -1234.5678; NumberFormat nf; System.out.println("Number format:"); nf = NumberFormat.getNumberInstance(); System.out.println(" Locale(Default): "+ nf.format(num)); nf = NumberFormat.getNumberInstance(Locale.FRANCE); System.out.println(" Locale(France): "+ nf.format(num)); nf = NumberFormat.getNumberInstance(Locale.FRENCH); System.out.println(" Locale(French): "+ nf.format(num)); nf = NumberFormat.getNumberInstance(Locale.JAPAN); System.out.println(" Locale(Japanese): "+ nf.format(num)); System.out.println("Currency format:"); nf = NumberFormat.getCurrencyInstance(); System.out.println(" Locale(Default): "+ nf.format(num)); nf = NumberFormat.getCurrencyInstance(Locale.FRANCE); System.out.println(" Locale(France): "+ nf.format(num)); nf = NumberFormat.getCurrencyInstance(Locale.FRENCH); System.out.println(" Locale(French): "+ nf.format(num)); nf = NumberFormat.getCurrencyInstance(Locale.JAPAN); System.out.println(" Locale(Japanese): "+ nf.format(num)); } }
Output:
Default date format: Locale(Default): November 1, 2018 9:45:44 AM EST Locale(France): 1 novembre 2018 09:45:44 EST Locale(French): 1 novembre 2018 09:45:44 EST Locale(German): 1. November 2018 09:45:44 EST Customized date format: Locale(Default): Fri Nov 01 09:45:44 EST 2018 Locale(French): ven. nov. 01 09:45:44 EST 2018 Locale(German): Fr Nov 01 09:45:44 EST 2018 Locale(Chinese): ??? ??? 01 09:45:44 EST 2018 Number format: Locale(Default): -1,234.568 Locale(France): -1á234,568 Locale(French): -1á234,568 Locale(Japanese): -1,234.568 Currency format: Locale(Default): ($1,234.57) Locale(France): -1á234,57 F Locale(French): -1á234,57 ñ Locale(Japanese): -?1,235
Note that:
Table of Contents
Date, Time and Calendar Classes
Date and Time Object and String Conversion
Number Object and Numeric String Conversion
►Locales, Localization Methods and Resource Bundles
java.util.Locale - Localization and Internationalization
java.util.ResourceBundle - Resource Bundle Abstract Class
java.util.ListResourceBundle - Resource Bundles as Lists
java.util.PropertyResourceBundle - Resource Bundles as Properties Files
java.util.ResourceBundle.getBundle() - Retrieving Resource Bundles
Calling and Importing Classes Defined in Unnamed Packages
HashSet, Vector, HashMap and Collection Classes
Character Set Encoding Classes and Methods
Encoding Conversion Programs for Encoded Text Files
Datagram Network Communication
DOM (Document Object Model) - API for XML Files
DTD (Document Type Definition) - XML Validation
XSD (XML Schema Definition) - XML Validation
XSL (Extensible Stylesheet Language)
Message Digest Algorithm Implementations in JDK
Private key and Public Key Pair Generation
PKCS#8/X.509 Private/Public Encoding Standards
Digital Signature Algorithm and Sample Program
"keytool" Commands and "keystore" Files
KeyStore and Certificate Classes
Secret Key Generation and Management
Cipher - Encryption and Decryption
The SSL (Secure Socket Layer) Protocol
SSL Socket Communication Testing Programs