tl; д-р
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();
Перегляньте формати
Ось приклад коду для перегляду результатів декількох форматів у декількох локалях, які автоматично локалізуються.
Це EnumSet
реалізація Set
, високо оптимізована як для низького використання пам'яті, так і для швидкої швидкості виконання при збиранні Enum
об'єктів. Отже, EnumSet.allOf( FormatStyle.class )
ми отримуємо колекцію всіх чотирьох перерахованих FormatStyle
об’єктів для циклу. Для отримання додаткової інформації див. Підручник Oracle щодо типів перечислення .
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 . І шукайте в 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 .