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
(a) 요일, 월 이름 등의 번역을위한 인간 언어, (b) 약어, 대문자, 구두점 등의 문제를 결정하는 문화적 규범을 결정합니다.
예:
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
열거 형 개체 의 컬렉션을 모두 제공 합니다. 자세한 내용 은 enum 유형에 대한 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의 프레임 워크는 나중에 자바 8에 내장되어 있습니다. 이 클래스는 까다로운 기존에 대신 기존 과 같은 날짜 - 시간의 수업을 java.util.Date
, Calendar
, SimpleDateFormat
.
Joda 타임 프로젝트는 지금에 유지 관리 모드 의로 마이그레이션을 조언 java.time의 클래스.
자세한 내용은 Oracle Tutorial을 참조하십시오 . 그리고 많은 예제와 설명을 위해 Stack Overflow를 검색하십시오. 사양은 JSR 310 입니다.
java.time 객체를 데이터베이스와 직접 교환 할 수 있습니다 . JDBC 4.2 이상을 준수 하는 JDBC 드라이버를 사용하십시오 . 문자열이나 클래스 가 필요하지 않습니다 .java.sql.*
java.time 클래스는 어디서 구할 수 있습니까?
ThreeTen - 추가 프로젝트 추가 클래스와 java.time를 확장합니다. 이 프로젝트는 java.time에 향후 추가 될 수있는 가능성을 입증하는 근거입니다. 당신은 여기에 몇 가지 유용한 클래스와 같은 찾을 수 있습니다 Interval
, YearWeek
, YearQuarter
, 그리고 더 .
java.util.Date
,java.util.Calendar
그리고java.text.SimpleDateFormat
지금 기존 에 의해 대체, java.time의 자바 8 자바 9 페이지에 내장 된 클래스 튜토리얼 오라클 .