1. DateTimeFormatter 클래스

특수 DateTimeFormatter클래스는 Date Time API에 적용됩니다. 그 목적은 프로그래머가 원하는 정확한 형식으로 날짜와 시간을 가능한 한 쉽게 변환하는 것입니다. 그리고 우리는 자바 개발자들이 성공했다는 소식을 전하게 되어 기쁩니다.

그것을 사용하는 것은 매우 쉽습니다. DateTimeFormatter먼저 클래스를 만들고 날짜와 시간을 표시하는 방법을 지정하는 패턴을 전달 해야 합니다 .

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);

변수는 어디에 dtf있습니까 DateTimeFormatter? 클래스 의 정적 메서드입니다 . 그리고 pattern은 날짜와 시간을 표시하는 데 사용할 패턴을 지정하는 문자열입니다.DateTimeFormatter.ofPattern()DateTimeFormatter

암호 콘솔 출력
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM-dd-yy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


02-22-19

위의 예에서는 메소드를 사용하여 패턴을 기반으로 객체를 ofPattern()생성합니다 . DateTimeFormatter그리고 다음 줄에서 메서드를 사용하여 개체를 문자열로 format()변환합니다 . LocalDateTime화면에 결과가 표시됩니다.

Date Time API의 거의 모든 개체를 메서드로 전달할 수 있습니다 format().

static ofPattern()도 매우 간단합니다. 패턴을 인수로 사용하고 객체를 반환합니다 DateTimeFormatter. 가장 흥미로운 부분은 패턴에서 찾을 수 있습니다.


2. 서식 패턴

패턴으로 전달된 문자열은 정보를 표시할 때 패턴으로 사용됩니다. MM은 월의 숫자로, dd 는 일로, yy는 연도의 숫자로 대체됩니다. 대소문자가 중요합니다.

이러한 시간 패턴에 대한 전체 표는 다음과 같습니다.

편지 의미
와이 년도
시간 시간
에스
에스 1000분의 1초
N 나노초.

특별히 기억하기 어렵지 않습니다.

그런데 예제의 패턴에 반복되는 문자 MM, dd 및 yy가 포함되는 이유는 무엇입니까? 글쎄, 이것은 더 흥미로워지는 곳입니다.

일반적인 생각

글자 수는 텍스트의 길이에 영향을 미칩니다. 글자가 많을수록 텍스트가 길어집니다.

H를 한 번 지정하면 9시간이 9로 표시되고, H를 연속으로 두 번 지정하면 9시간이 09로 표시됩니다.

문자 y가 연속으로 2번 지정되면 연도는 2자리로 작성됩니다. 연속으로 4번 발생하면 4자리 숫자가 사용됩니다.

문자 M이 연속으로 2번 지정되면 해당 월의 숫자가 기록됩니다. 연속으로 3번이면 월 이름(처음 3자)이 사용됩니다. 연속으로 4번이면 해당 월의 전체 이름이 사용됩니다.

예:

암호 콘솔 출력
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


February-22-2019


3. 완전한 패턴 표

전체 테이블은 상당히 크고 매우 흥미롭습니다.

무늬 패턴의 변형 설명
와이 yy, yyyy 19; 2019년 년도
M/L M, MM, MMM, MMMM, MMMMM 1; 01; 얀; 1월; 제이
디, dd 9; 09
시간 H, HH 2; 02 시간
m, mm 삼; 03
에스 에스, 에스 5; 05
에스 S, SS, SSS, ... 1; 12; 123 1000분의 1초
N N 123456789 나노초
G 지, GGGG, GGGG 기원 후; 서기; ㅏ; 연대
Q/Q q, qq, qqq, qqqq 삼; 03; Q3; 3분기 4분의 1
13 올해의 주
이달의 주
이자형 에에에에에에에에에에에에에에에에에에에에에에에에에에 월; 월요일; 중 요일
e/c 에, 에, 에, 에, 에에 1; 01; 월요일; 월요일; 중 요일
오후 오전 아니면 오후
시간 시간 12 12시간 시계.
V VV 유럽/헬싱키 시간대
지 zzzz EET; 동유럽 표준시 시간대
영형 오오오오 그리니치 표준시+2; GMT+02:00 시간대

그건 그렇고, 이것은 실제로 완전한 버전이 아닙니다. 여기에서 가장 완전한 버전을 찾을 수 있습니다 .



4. 파싱 시간

DateTimeFormatter클래스는 주어진 패턴에 따라 날짜와 시간을 문자열로 변환할 수 있을 뿐만 아니라 역 연산을 수행할 수 있다는 점에서도 흥미롭습니다!

문자열 구문 분석은 문자열을 의미 있는 토큰으로 분할하는 프로세스입니다.

다음과 같습니다.

암호 콘솔 출력
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
LocalDate date = LocalDate.parse("February-23-2019", dtf);
System.out.println(date);


February-23-2019

먼저 개체를 만들고 DateTimeFormatter구문 분석에 사용되는 패턴을 설정합니다.

LocalDate.parse()그런 다음 or LocalTime.parse()또는 메서드를 호출 LocalDateTime.parse()하고 개체와 함께 구문 분석할 문자열을 전달합니다 DateTimeFormatter. 개체는 전달된 텍스트를 구문 분석하는 방법과 이를 수행하는 데 사용해야 하는 패턴을 이해합니다.

또 다른 예: 이번에는 시간을 구문 분석합니다.

암호 콘솔 출력
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime time = LocalTime.parse("23:59:59", dtf);
System.out.println(time);


23:59:59