Internalizacja Java - szybki przewodnik
Internalizacja
Internalizacja lub I18N odnosi się do zdolności aplikacji do obsługi użytkowników w wielu różnych językach. Java ma wbudowaną obsługę internalizacji. Java zapewnia również formatowanie liczb, walut oraz odpowiednie dostosowywanie daty i godziny.
Java Internationalization pomaga sprawić, że aplikacja Java obsługuje różne języki, formaty liczb, waluty, formatowanie czasu w zależności od regionu.
Lokalizacja
Lokalizacja lub L10N to zdolność adaptacyjna aplikacji, czyli sposób, w jaki aplikacja dostosowuje się do określonego języka, formatów liczb, ustawień daty i godziny itp.
Aplikacja java powinna być umiędzynarodowiona, aby móc się lokalizować.
Informacje zależne od kultury
Poniższe informacje często różnią się w zależności od strefy czasowej lub kultury.
Messages
Date
Time
Number
Currency
Measurements
Numery telefoniczne
Adresy pocztowe
Etykiety GUI
Zajęcia z internacjonalizacji
Java ma zestaw wbudowanych klas, które pomagają w internacjonalizacji aplikacji. Te klasy są następujące:
Sr.No. | Klasa i opis |
---|---|
1 | Locale Reprezentuje język wraz z krajem / regionem. |
2 | ResourceBundle Zawiera zlokalizowany tekst lub obiekty. |
3 | NumberFormat Służy do formatowania liczb / walut zgodnie z ustawieniami regionalnymi. |
4 | DecimalFormat Służy do formatowania liczb zgodnie z niestandardowym formatem i według ustawień regionalnych. |
5 | DateFormat Służy do formatowania dat według ustawień regionalnych. |
6 | SimpleDateFormat Służy do formatowania dat zgodnie z niestandardowym formatem i według ustawień regionalnych. |
Internalizacja Java - konfiguracja środowiska
W tym rozdziale omówimy różne aspekty konfigurowania odpowiedniego środowiska dla języka Java.
Konfiguracja środowiska lokalnego
Jeśli nadal chcesz skonfigurować swoje środowisko pod kątem języka programowania Java, w tej sekcji omówiono sposób pobierania i konfigurowania środowiska Java na komputerze. Poniżej przedstawiono kroki konfiguracji środowiska.
Java SE jest dostępna bezpłatnie pod linkiem Pobierz Javę . Możesz pobrać wersję opartą na systemie operacyjnym.
Postępuj zgodnie z instrukcjami, aby pobrać Javę i uruchomić .exeaby zainstalować Javę na swoim komputerze. Po zainstalowaniu Javy na komputerze należy ustawić zmienne środowiskowe, aby wskazywały prawidłowe katalogi instalacyjne -
Konfigurowanie ścieżki dla systemu Windows
Zakładając, że zainstalowałeś Javę w katalogu c: \ Program Files \ java \ jdk -
Kliknij prawym przyciskiem myszy „Mój komputer” i wybierz „Właściwości”.
Kliknij przycisk „Zmienne środowiskowe” na karcie „Zaawansowane”.
Teraz zmień zmienną „Path”, aby zawierała również ścieżkę do pliku wykonywalnego Java. Na przykład, jeśli ścieżka jest obecnie ustawiona na „C: \ WINDOWS \ SYSTEM32”, zmień ścieżkę na „C: \ WINDOWS \ SYSTEM32; c: \ Program Files \ java \ jdk \ bin”.
Konfigurowanie ścieżki dla systemów Linux, UNIX, Solaris, FreeBSD
Zmienna środowiskowa PATH powinna być ustawiona tak, aby wskazywała, gdzie zostały zainstalowane pliki binarne Java. Zajrzyj do dokumentacji powłoki, jeśli masz z tym problem.
Na przykład, jeśli używasz bash jako powłoki, dodasz następujący wiersz na końcu swojego '.bashrc: export PATH = / path / to / java: $ PATH'
Popularne edytory Java
Do pisania programów w języku Java potrzebny będzie edytor tekstu. Na rynku dostępne są jeszcze bardziej wyrafinowane środowiska IDE. Ale na razie możesz rozważyć jedną z następujących rzeczy -
Notepad - Na komputerze z systemem Windows możesz użyć dowolnego prostego edytora tekstu, takiego jak Notatnik (zalecany w tym samouczku), TextPad.
Netbeans - Środowisko Java IDE o otwartym kodzie źródłowym i bezpłatne, które można pobrać z witryny https://www.netbeans.org/index.html.
Eclipse - Środowisko Java IDE opracowane przez społeczność eclipse open source i można je pobrać z witryny https://www.eclipse.org/.
Co jest następne?
W następnym rozdziale nauczysz się, jak napisać i uruchomić swój pierwszy program w języku Java, a także przedstawimy kilka ważnych podstawowych składni w języku Java potrzebnych do tworzenia aplikacji.
Internalizacja Java - klasa ustawień regionalnych
Obiekt Locale reprezentuje określony region geograficzny / polityczny / kulturowy. Każda operacja wymagająca ustawienia regionalnego do wykonania swojego zadania jest nazywana operacją zależną od ustawień regionalnych i używa ustawień regionalnych do nadrzędnych informacji dotyczących użytkownika. Na przykład wyświetlanie liczby jest operacją uwzględniającą ustawienia regionalne. Numer powinien być sformatowany zgodnie ze zwyczajami i konwencjami kraju, regionu lub kultury ojczystej użytkownika.
Treść ustawień regionalnych
Obiekt Locale zawiera następujące elementy:
Language- Kod języka ISO 639 alpha-2 lub alpha-3 lub podtagi zarejestrowanego języka do 8 liter alfabetu. Kod alfa-2 musi być użyty, jeśli obecny jest zarówno kod alfa-2, jak i alfa-3. W polu językowym nie jest rozróżniana wielkość liter, ale ustawienia regionalne zawsze są kanonizowane na małe litery.
Script- Kod skryptu ISO 15924 alfa-4. W polu skryptu nie jest rozróżniana wielkość liter, ale ustawienie regionalne jest zawsze kanonizowane na wielkość liter w tytule.
Country (region)- Kod kraju ISO 3166 alpha-2 lub numeryczny kod 3 obszaru UN M.49. W polu kraju wielkość liter nie jest rozróżniana, ale język lokalny zawsze konwertuje na wielkie litery.
Variant- dowolna wartość używana do wskazania odmiany ustawienia regionalnego. Tam, gdzie istnieją co najmniej dwie wartości wariantowe, z których każda wskazuje własną semantykę, wartości te należy uporządkować według ważności, z najważniejszymi na początku, oddzielonymi podkreśleniem („_”). W polu wariantu rozróżniana jest wielkość liter.
Extensions- Mapa od kluczy jednoznakowych do wartości ciągów, wskazująca rozszerzenia oprócz identyfikacji języka. Rozszerzenia w Locale implementują semantykę i składnię podtagów rozszerzeń BCP 47 i podtagów użytku prywatnego. W rozszerzeniach wielkość liter nie jest rozróżniana, ale ustawienia regionalne kanonizują wszystkie klucze rozszerzeń i wartości na małe litery.
Internalizacja Java - przykład - szczegóły ustawień regionalnych
W tym przykładzie otrzymamy domyślne ustawienie regionalne i wydrukujemy jego szczegóły. Następnie utwórz ustawienia regionalne dla „fr” i wydrukuj jego szczegóły.
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());
}
}
Wynik
Zostanie wydrukowany następujący wynik.
Default Locale Properties:
United States
English
English (United States)
USA
eng
en
US
fr Locale Properties:
France
French
French (France)
FRA
fra
fr
FR
Internalizacja Java - przykład - język wyświetlania
W tym przykładzie otrzymamy język wyświetlania według ustawień regionalnych przekazany jako argument.
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));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
English
anglais
inglés
Internalizacja języka Java - klasa ResourceBundle
Klasa ResourceBundle służy do przechowywania tekstu i obiektów uwzględniających ustawienia regionalne. Zwykle używamy plików właściwości do przechowywania tekstu specyficznego dla lokalizacji, a następnie reprezentujemy je za pomocą obiektu ResourceBundle. Poniżej przedstawiono kroki, aby użyć pliku właściwości specyficznych dla ustawień regionalnych w aplikacji opartej na Javie.
Krok 1: Utwórz pliki właściwości.
Załóżmy, że potrzebujemy pliku właściwości dla języka angielskiego. Następnie utwórz nazwę pliku właściwości XXX_en_US.properties, gdzie XXX to nazwa pliku, a en_US reprezentuje język angielski (USA).
Messages_en_US.properties
message=Welcome to TutorialsPoint.COM!
Utwórzmy teraz plik właściwości dla francuskich ustawień regionalnych. Następnie utwórz nazwę pliku właściwości XXX_fr_FR.properties, gdzie XXX jest nazwą pliku, a fr_FR reprezentuje język francuski (Francja).
Messages_fr_FR.properties
message=Bienvenue sur TutorialsPoint.COM!
Tutaj możesz dowiedzieć się, że klucz jest taki sam, ale wartość jest specyficzna dla ustawień regionalnych w obu plikach właściwości.
Krok 2: Utwórz obiekt ResourceBundle
Utwórz obiekt ResourceBundle z nazwą pliku właściwości i ustawieniami narodowymi, używając następującej składni.
ResourceBundle bundle = ResourceBundle.getBundle("Messages", Locale.US);
Krok 3: Pobierz wartość z obiektu ResourceBundle.
Pobierz wartość z obiektu ResourceBundle, przekazując klucz.
String value = bundle.getString("message");
Przykład
Poniższy przykład ilustruje użycie obiektów ResourceBundle do wyświetlania wartości specyficznych dla ustawień regionalnych z plików właściwości.
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"));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
Message in en_US: Welcome to TutorialsPoint.COM!
Message in fr_FR: Bienvenue sur TutorialsPoint.COM!
Uwagi dotyczące konwencji nazewnictwa
Poniżej przedstawiono konwencje nazewnictwa dla pliku właściwości.
W przypadku pliku właściwości zamapowanego na domyślne ustawienia regionalne nie jest wymagany żaden przedrostek. message_en_US.properties jest równoważne z message.properties.
W przypadku pliku właściwości zamapowanego na język, przedrostek można dołączyć na dwa sposoby. message_fr.properties jest odpowiednikiem message_fr_FR.properties.
Internalizacja Java - klasa NumberFormat
Klasa java.text.NumberFormat służy do formatowania liczb i walut zgodnie z określonymi ustawieniami regionalnymi. Formaty liczb różnią się w zależności od kraju. Na przykład w Danii ułamki liczby są oddzielane od części całkowitej przecinkiem, podczas gdy w Anglii separatorem jest kropka.
Przykład - formatowanie liczb
W tym przykładzie formatujemy liczby na podstawie ustawień regionalnych dla Stanów Zjednoczonych i języka duńskiego.
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));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
100,76
100.76
Internalizacja Java - formatowanie walut
W tym przykładzie formatujemy waluty na podstawie ustawień regionalnych dla Stanów Zjednoczonych i języka duńskiego.
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));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
kr 100,76
$100.76
Internalizacja Java - procenty formatów
W tym przykładzie formatujemy liczby w formacie procentowym.
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));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
76%
Internalizacja Java - ustaw minimalną / maksymalną dokładność
W tym przykładzie ustawiamy minimalne i maksymalne cyfry zarówno dla części całkowitej, jak i części ułamkowej liczby.
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));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
234.763
Internalizacja Java - Ustaw tryb zaokrąglania
W tym przykładzie prezentujemy tryb zaokrąglania.
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));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
100
99
Internalizacja Java - analizowanie liczb
W tym przykładzie prezentujemy analizę liczby występującej w różnych lokalizacjach.
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"));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
100.76
10076
Internalizacja Java - klasa DecimalFormat
Klasa java.text.DecimalFormat służy do formatowania liczb zgodnie z formatem niestandardowym i ustawieniami narodowymi.
Przykład - formatowanie liczb
W tym przykładzie formatujemy liczby na podstawie podanego wzorca.
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));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
1.23456789123E8
1,2345,6789.12
Internalizacja języka Java - wzorce formatowania
Poniżej przedstawiono użycie znaków we wzorcach formatowania.
Sr.No. | Klasa i opis |
---|---|
1 | 0 Aby wyświetlić 0, jeśli jest mniej cyfr. |
2 | # Wyświetla cyfry bez wiodących zer. |
3 | . Separator liczb dziesiętnych. |
4 | , Separator grupujący. |
5 | E Separator mantysy i wykładnika dla formatów wykładniczych. |
6 | ; Separator formatu. |
7 | - Prefiks liczby ujemnej. |
8 | % Pokazuje liczbę jako procent po pomnożeniu przez 100. |
9 | ? Pokazuje liczbę w milach po pomnożeniu przez 1000. |
10 | X Oznaczanie znaku jako prefiksu / sufiksu numeru. |
11 | ' Aby zaznaczyć cudzysłów wokół znaków specjalnych. |
W tym przykładzie formatujemy liczby na podstawie różnych wzorców.
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));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
1.23456789123E8
1,2345,6789.12
Internalizacja Java - DecimalFormat specyficzny dla języka
Domyślnie obiekt DecimalFormat używa ustawień regionalnych maszyny JVM. Możemy zmienić domyślne locale podczas tworzenia obiektu DecimalFormat za pomocą klasy NumberFormat. W poniższym przykładzie użyjemy tego samego wzorca dla dwóch różnych ustawień regionalnych i możesz zauważyć różnicę w wynikach.
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));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
123.45
123,45
Internalizacja języka Java - klasa DecimalFormatSymbols
Używając klasy DecimalFormatSymbols, można zmienić domyślne symbole separatorów, symbole separatorów grupujących itp. Poniższy przykład ilustruje to samo.
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));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
126,473.457
126:473;457
Internalizacja Java - grupowanie cyfr
Używając metody setGroupingSize () klasy DecimalFormat, można zmienić domyślne grupowanie liczb. Poniższy przykład ilustruje to samo.
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));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
1.212232324734567E11
121,223,232,473.457
1212,2323,2473.457
Internalizacja Java - klasa DateFormat
Klasa java.text.DateFormat formatuje daty zgodnie z ustawieniami narodowymi. Ponieważ różne kraje używają różnych formatów do wyświetlania dat. Ta klasa jest niezwykle przydatna w przypadku terminów w internalizacji aplikacji. Poniższy przykład pokazuje, jak utworzyć i używać klasy 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()));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
Nov 29, 2017
29-11-2017
Internalizacja Java - formatowanie dat
Klasa DateFormat udostępnia różne formaty do formatowania daty. Poniżej znajduje się lista niektórych formatów.
DateFormat.DEFAULT
DateFormat.SHORT
DateFormat.MEDIUM
DateFormat.LONG
DateFormat.FULL
W poniższym przykładzie pokażemy, jak używać różnych formatów.
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()));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
Nov 29, 2017
11/29/17
Nov 29, 2017
November 29, 2017
Wednesday, November 29, 2017
Internalizacja Java - czas formatowania
Klasa DateFormat udostępnia różne formaty formatowania godziny. Należy użyć metody DateFormat.getTimeInstance (). Zobacz poniższy przykład.
W poniższym przykładzie pokażemy, jak używać różnych formatów do formatowania czasu.
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()));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
4:11:21 PM
4:11 PM
4:11:21 PM
4:11:21 PM IST
4:11:21 PM IST
Internalizacja Java - formatowanie daty i godziny
Klasa DateFormat udostępnia różne formaty do wspólnego formatowania daty i godziny. Należy użyć metody DateFormat.getDateTimeInstance (). Zobacz poniższy przykład.
W poniższym przykładzie pokażemy, jak używać różnych formatów do formatowania daty i godziny.
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()));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
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
Internalizacja języka Java - klasa SimpleDateFormat
Klasa java.text.SimpleDateFormat formatuje daty zgodnie z podanym wzorcem. Służy również do analizowania dat z łańcucha, w którym ciąg zawiera datę we wspomnianym formacie. Zobacz poniższy przykład użycia klasy 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));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
Wed Nov 29 17:01:22 IST 2017
29-11-2017
29-11-2017
Internalizacja Java - SimpleDateFormat specyficzny dla lokalizacji
Ustawienia regionalne mogą służyć do tworzenia formatowania specyficznego dla ustawień regionalnych we wzorcu w klasie SimpleDateFormat. Zobacz poniższy przykład użycia klasy SimpleDateFormat specyficznej dla ustawień regionalnych.
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));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
Wed Nov 29 17:48:14 IST 2017
Wednesday November 2017
onsdag november 2017
Internalizacja języka Java - klasa DecimalFormatSymbols
Używając klasy DecimalFormatSymbols, można zmienić domyślne symbole separatorów, symbole separatorów grupujących itp. Poniższy przykład ilustruje to samo.
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));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
126,473.457
126:473;457
Internalizacja Java - wzorce formatu daty
Poniżej przedstawiono użycie znaków we wzorcach formatowania daty.
Sr.No. | Klasa i opis |
---|---|
1 | G Aby wyświetlić Era. |
2 | y Aby wyświetlić rok. Prawidłowe wartości yy, yyyy. |
3 | M Aby wyświetlić miesiąc. Prawidłowe wartości MM, MMM lub MMMMM. |
4 | d Aby wyświetlić dzień miesiąca. Prawidłowe wartości d, dd. |
5 | h Aby wyświetlić godzinę dnia (1-12 AM / PM). Prawidłowa wartość hh. |
6 | H Aby wyświetlić godzinę dnia (0-23). Prawidłowa wartość HH. |
7 | m Aby wyświetlić minuty godziny (0-59). Ważna wartość mm. |
8 | s Aby wyświetlić sekundę minuty (0-59). Prawidłowa wartość ss. |
9 | S Aby wyświetlić milisekundy minuty (0-999). Ważna wartość SSS. |
10 | E Aby wyświetlić dzień w tygodniu (np. Poniedziałek, wtorek itp.) |
11 | D Aby wyświetlić dzień w roku (1-366). |
12 | F Aby wyświetlić dzień tygodnia w miesiącu (np. 1. czwartek grudnia). |
13 | w Aby wyświetlić tydzień w roku (1-53). |
14 | W Aby wyświetlić tydzień w miesiącu (0-5) |
15 | a Aby wyświetlić AM / PM |
16 | k Aby wyświetlić godzinę w dzień (1-24). |
17 | K Aby wyświetlić godzinę w dzień, AM / PM (0-11). |
18 | z Aby wyświetlić strefę czasową. |
W tym przykładzie formatujemy daty na podstawie różnych wzorców.
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));
}
}
Wynik
Zostanie wydrukowany następujący wynik.
29-11-17
11-29-2017
2017-11-29 18:47:42
Wednesday November 2017 18:47:42.787+0530
Internalizacja Java - UTC
UTC oznacza skoordynowany czas uniwersalny. Jest to standard czasowy i jest powszechnie stosowany na całym świecie. Wszystkie strefy czasowe są obliczane porównawczo z przesunięciem czasu UTC. Na przykład czas w Kopenhadze w Danii to UTC + 1 oznacza czas UTC plus jedna godzina. Jest niezależny od czasu letniego i powinien być używany do przechowywania daty i godziny w bazach danych.
Konwersja stref czasowych
Poniższy przykład pokaże konwersję różnych stref czasowych. Wydrukujemy godzinę dnia i godzinę w milisekundach. Pierwsza będzie się różnić, a druga pozostanie taka sama.
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());
}
}
Wynik
Zostanie wydrukowany następujący wynik.
UTC: 12
UTC: 1511956997540
CPH: 13
CPH: 1511956997540
NYC: 7
NYC: 1511956997540
Dostępne strefy czasowe
Poniższy przykład pokaże strefy czasowe dostępne w systemie.
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);
}
}
}
Wynik
Zostanie wydrukowany następujący wynik.
Timezone = Africa/Abidjan
Timezone = Africa/Accra
...
Timezone = VST
Internalizacja Java - konwersja do Unicode z / na ciąg
W Javie tekst jest wewnętrznie przechowywany w formacie Unicode. Jeśli wejście / wyjście ma inny format, wymagana jest konwersja.
Konwersja
Poniższy przykład ilustruje konwersję łańcucha Unicode na bajt UTF8 [] i bajt UTF8 [] na bajt 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]);
}
}
}
Wynik
Zostanie wydrukowany następujący wynik.
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
Internalizacja Java - Konwersja Unicode z / do czytnika / pisarza
Klasy Reader i Writer to klasy strumieniowe zorientowane na znaki. Można ich używać do odczytywania i konwertowania znaków Unicode.
Konwersja
Poniższy przykład przedstawia konwersję ciągu znaków Unicode na bajt UTF8 [] i bajt [] UTF8 na bajt [] w formacie Unicode przy użyciu klas Reader i 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);
}
}
Wynik
Zostanie wydrukowany następujący wynik.
This is a sample text
This is a sample text
Wydrukować