tl; dr
LocalDate.now().format(
DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM )
.withLocale( new Locale( "no" , "NO" ) )
)
Беспокойный классы java.util.Date
и SimpleDateFormat
теперь наследие, вытеснили классы java.time.
LocalDate
LocalDate
Класс представляет собой дату только значение без времени суток и без временной зоны.
Часовой пояс имеет решающее значение при определении даты. В любой момент дата меняется в зависимости от зоны земного шара. Например, несколько минут после полуночи в Париже, Франция - это новый день, в то время как в Монреаль-Квебеке все еще «вчера» .
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
DateTimeFormatter
Используется DateTimeFormatter
для создания строк, представляющих только часть даты или часть времени.
DateTimeFormatter
Класс может автоматически локализовать .
Для локализации укажите:
FormatStyle
чтобы определить, насколько длинной или сокращенной должна быть строка.
Locale
для определения (а) человеческого языка для перевода названия дня, названия месяца и т. д. и (б) культурных норм, решающих вопросы сокращения, заглавной буквы, пунктуации и т. д.
Пример:
Locale l = Locale.CANADA_FRENCH ;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL ).withLocale( l );
String output = ld.format( f );
Пойдя в другую сторону, вы можете проанализировать локализованную строку.
LocalDate ld = LocalDate.parse( input , f );
Обратите внимание, что языковой стандарт и часовой пояс являются полностью ортогональными проблемами. Вы можете представить момент из Монреаля на японском языке или момент из Окленда, Новой Зеландии, представленный на языке хинди.
Другой пример: измените 6 junio 2012
(испанский) на 2012-06-06
(стандартный формат ISO 8601 ). Классы java.time по умолчанию используют форматы ISO 8601 для синтаксического анализа / генерации строк.
String input = "6 junio 2012";
Locale l = new Locale ( "es" , "ES" );
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "d MMMM uuuu" , l );
LocalDate ld = LocalDate.parse ( input , f );
String output = ld.toString();
Просматривайте форматы
Вот пример кода для просмотра результатов нескольких форматов в нескольких локали, автоматически локализованных.
An EnumSet
- это реализация Set
, оптимизированная как для низкого использования памяти, так и для высокой скорости выполнения при сборе Enum
объектов. Итак, EnumSet.allOf( FormatStyle.class )
мы получаем коллекцию всех четырех FormatStyle
объектов перечисления для цикла. Для получения дополнительной информации см. Oracle Tutorial по типам перечислений .
LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 );
List < Locale > locales = new ArrayList <>( 3 );
locales.add( Locale.CANADA_FRENCH );
locales.add( new Locale( "no" , "NO" ) );
locales.add( Locale.US );
for ( Locale locale : locales )
{
System.out.println( "------| LOCALE: " + locale + " — " + locale.getDisplayName() + " |----------------------------------" + System.lineSeparator() );
for ( FormatStyle style : EnumSet.allOf( FormatStyle.class ) )
{
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( style ).withLocale( locale );
String output = ld.format( f );
System.out.println( output );
}
System.out.println( "" );
}
System.out.println( "« fin »" + System.lineSeparator() );
Вывод.
------| LOCALE: fr_CA — French (Canada) |----------------------------------
mardi 23 janvier 2018
23 janvier 2018
23 janv. 2018
18-01-23
------| LOCALE: no_NO — Norwegian (Norway) |----------------------------------
tirsdag 23. januar 2018
23. januar 2018
23. jan. 2018
23.01.2018
------| LOCALE: en_US — English (United States) |----------------------------------
Tuesday, January 23, 2018
January 23, 2018
Jan 23, 2018
1/23/18
« fin »
О java.time
Java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытеснять неприятные старые устаревшие классы даты и времени , такие как java.util.Date
, Calendar
, и SimpleDateFormat
.
Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поищите в Stack Overflow множество примеров и объяснений. Спецификация - JSR 310 .
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или новее. Нет необходимости в строках, нет необходимости в java.sql.*
занятиях.
Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является испытательной площадкой для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как Interval
, YearWeek
, YearQuarter
, и более .
java.util.Date
,java.util.Calendar
иjava.text.SimpleDateFormat
теперь наследие , вытесняется java.time классов , встроенных в Java 8 и Java 9. См руководство по Oracle .