- •Лекция 9
- •Субъекты локализации
- •Различия в дате и времени
- •Различия в числах
- •Региональный стандарт
- •Региональный стандарт
- •Региональный стандарт
- •Региональный стандарт в Java
- •Создание объекта Locale
- •Создание объекта Locale
- •Формат вывода чисел
- •Форматирование числа
- •Форматирование денежных единиц
- •Преобразование строки в число
- •Класс NumberFormat
- •Денежные единицы
- •Денежные единицы
- •Дата и время
- •Форматирование даты и времени
- •Форматирование и анализ даты/времени
- •Календари
- •Calendar.get(field)
- •Calendar.set(field, value)
- •Calendar.add(field,delta)
- •Calendar.roll(field, delta)
- •Сравнение строк
- •Сравнение строк
- •Форматирование строк
- •Спецификатор формата
- •Категории типов преобразования
- •Форматирование даты/времени
- •Форматирование даты/времени
- •Ошибки форматирования
- •Форматирование сообщений
- •Указание типа и стиля
- •Типы и стили
- •Формат выбора
- •Формат выбора
- •Ресурсы
- •Поиск ресурсов
- •Ресурсы - файлы свойств
- •Создание файлов свойств
- •Ресурсы — class файлы
Формат вывода чисел
Для форматирования числа необходимо:
Получить объект регионального стандарта
Получить объект форматирования
Применить объект форматирования для форматирования числа или его разбора
Форматирование числа
Для форматирования чисел используется класс java.text.NumberFormat.
Locale locale = new Locale("de", "DE");
NumberFormat currFormat = NumberFormat.getInstance(locale);
double amount = 123456.78;
System.out.println(currFormat.format(currF
ormat));
Результат:
123,456.78
Форматирование денежных единиц
Locale locale = new Locale("de", "DE");
NumberFormat currFormat = NumberFormat.getCurrencyInstance(locale);
double amount = 123456.78;
System.out.println(currFormat.format(currFo
rmat));
Результат:
123,456.78 €
Преобразование строки в число
TextField input;
. . .
NumberFormat fmt =
NumberFormat.getNumberInstance();
Number input = fmt.parse(input.getText().trim());
double x = input.doubleValue();
В случае ошибки преобразование генерируется исключение ParseException
Класс NumberFormat
static NumberFormat getCurrencyInstance(Locale inLocale)
static NumberFormat getInstance(Locale inLocale)
static NumberFormat getIntegerInstance(Locale inLocale)
static NumberFormat getNumberInstance(Locale inLocale)
static NumberFormat getPercentInstance(Locale inLocale)
String format(double number)
String format(long number)
Денежные единицы
Не решение проблемы:
NumberFormat dollarFormatter = NumberFormat.getNumberInstance(Locale.US);
NumberFormat euroFormatter = NumberFormat.getNumberInstance(Locale.GERMANY);
Так как вывод 100 000 будет: $100,000.00 100.000,00€
Денежные единицы
NumberFormat euroFormatter = NumberFormat.getNumberInstance();
euroFormatter.setCurrency(Currency.getInstance("EUR")
);
NumberFormat dollarFormatter = NumberFormat.getNumberInstance();
dollarFormatter.setCurrency(Currency.getInstance("USD
"));
Коды валют (ISO-4217):
USD — доллар США
EUR — евро
GBP — Английский Фунт
RUB — Российский рубль
Дата и время
Особенности форматирования даты и времени:
Названия месяцев должны быть представлены на местном языке
Последовательность указания год-месяц-день различаются
Для отображения дат может быть использован не григорианский календарь
Следует учитывать часовые пояса
Форматирование даты и времени
DateFormat fmt = DateFormat.getDateInstance(dateStyle, locale);
DateFormat fmt = DateFormat.getTimeInstance(timeStyle, locale);
DateFormat fmt = DateFormat.getDateTimeInstance(dateStyle, timeStyle, locale);
DateFormat.DEFAULT
DateFormat.FULL (Friday, April 4, 2008 10:30:00 am
PDT)
DateFormat.LONG (April 4, 2008 10:30:00 pm PDT)
DateFormat.MEDIUM (Apr 4, 2008 10:30:00 pm) DateFormat.SHORT (4/3/08 10:30:00pm)
Форматирование и анализ даты/времени
Форматирование даты/времени:
Date now = new Date();
String s = fmt.format(now); System.out.println(s);
Анализ даты/времени:
TextField inputText;
. . .
DateFormat fmt = DateFormat.getDateInstance(DateFormat.MEDIUM);
Date input = fmt.parse(inputText.getText().trim());
В случае ошибки преобразования генерируется ParseException