Интернационализация дат Java

Учитывая исторически сложившиеся способы отображения даты и времени в различных странах и регионах мира, в языке создан механизм поддержки всех национальных особенностей. Эту задачу решает класс java.text.DateFormat. С его помощью учтены: необходимость представления месяцев и дней недели на национальном языке; специфические последовательности в записи даты и часовых поясов; возможности использования различных календарей.

Процесс получения объекта, отвечающего за обработку регионального стандарта даты, похож на создание объекта, отвечающего за национальные представления чисел, а именно:

DateFormat df = DateFormat.getDateInstance(

DateFormat.MEDIUM, new Locale("BY"));

или по умолчанию:

DateFormat.getDateInstance();

Константа DateFormat.MEDIUM указывает на то, что будут представлены только дата и время без указания часового пояса. Для указания часового пояса используются константы класса DateFormat со значением LONG и FULL. Константа SHORT применяется для сокращенной записи даты, где месяц представлен в виде своего порядкового номера.

Для получения даты в виде строки для заданного региона используется метод String format(Date date) в виде:

String dat = df.format(new Date());

С помощью метода Date parse(String source) можно преобразовать переданную в виде строки дату в объектное представление конкретного регионального формата, например:

String str = "April 3, 2006";

Date d = df.parse(str);

Класс содержит большое количество методов, позволяющих выполнять разнообразные манипуляции с датой и временем.

В качестве примера рассмотрено преобразование заданной даты в различные региональные форматы.

// пример # 18 : региональные представления дат: DemoDateFormat.java

package chapt07;

import java.text.DateFormat;

import java.text.ParseException;

import java.util.*;

public class DemoDateFormat {

public static void main(String[] args) {

DateFormat df =

DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.US);

Date d = null;

String str = "April 3, 2006";

try {

d = df.parse(str);

System.out.println(d);

} catch (ParseException e) {

e.printStackTrace();

}

df =

DateFormat.getDateInstance(DateFormat.FULL,

new Locale("ru","RU"));

System.out.println(df.format(d));

df =

DateFormat.getDateInstance(DateFormat.FULL,Locale.GERMAN);

System.out.println(df.format(d));

d = new Date();

//загрузка в объект df текущего времени

df = DateFormat.getTimeInstance();

//представление и вывод времени в текущем формате дат

System.out.println(df.format(d));

}

}

Результат работы программы:

Mon Apr 03 00:00:00 EEST 2006

3 Апрель 2006 г.

Montag, 3. April 2006

05:45:16

Чтобы получить представление текущей даты во всех возможных региональных стандартах, можно воспользоваться следующим фрагментом кода:

Date d = new Date();

Locale[] locales =

DateFormat.getAvailableLocales();

for (Locale loc : locales) {

DateFormat df =

DateFormat.getDateInstance(DateFormat.FULL, loc);

System.out.println(loc.toString() + "—> "

+ df.format(d));

}

В результате будут выведены две сотни строк, каждая из которых представляет текущую дату в соответствии с региональным стандартом, выводимым перед датой с помощью инструкции loc.toString().

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100