[Java][time] DateTimeFormatter 클래스의 파싱과 포맷
2022. 6. 21. 14:09ㆍJAVA/Language
1. DateTimeFormatter 클래스
DateTimeFormatter 클래스는 날짜와 시간을 원하는 형식으로 출력하고 해석(파싱, parsing)하는데 사용되는 클래스입니다.
DateTimeFormatter에 상수로 정의된 형식을 사용하여 날짜를 형식화
/**
* title : DateTimeFormatter 날짜 형식 방법
*
* DateTimeFormatter 클래스 메서드
* String DateTimeFormatter.사전정의된형식.format(LocalDate localDate)
* : localDate 인스턴스를 사전정의된 형식으로 형식화하여 문자열로 반환
*
* LocalDate 인스턴스 메서드
* String format(DateTimeFormatter dateTimeFormatter)
* : LocalDate 인스턴스를 dateTimeFormatter 인스턴스에 맞게 형식화하여 문자열로 반환
*
* DateTimeFormatter에 상수로 정의된 형식
* - https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
*/
@Order(1)
@Test
void DateTimeFormmaterPredefinedFormattersTest() {
printMethodName("DateTimeFormmaterPredefinedFormattersTest");
LocalDate date = LocalDate.of(2015, 1, 1);
// 날짜 형식 방법 1 : DateTimeFormatter.format() 메서드
String yyyymmdd = DateTimeFormatter.ISO_LOCAL_DATE.format(date);
// 날짜 형식 방법 2 : LocalDate.format() 메서드
String yyyymmdd2 = date.format(DateTimeFormatter.ISO_LOCAL_DATE);
System.out.println(yyyymmdd); // 2015-01-01
System.out.println(yyyymmdd2); // 2015-01-01
}
로케일에 종속된 형식화
/**
* title : 로케일에 종속된 형식화
* DateTimeFormatter 클래스의 ofLocalizedDate(), ofLocalizedTime(), ofLocalizedDateTime()
* 클래스 메서드는 로케일(locale)에 종속적인 포맷터를 생성합니다.
*
* DateTimeFormatter 클래스 메서드
* DateTimeFormatter DateTimeFormatter.ofLocalizedDate(FormatStyle dateStyle)
* DateTimeFormatter DateTimeFormatter.ofLocalizedTime(FormatStyle dateStyle)
* DateTimeFormatter DateTimeFormatter.ofLocalizedDateTime(FormatStyle dateStyle)
*
* FormatStyle에 정의된 상수와 출력 예
* FormStyle 날짜 시간
* FULL 2015년 11월 28일 토요일 N/A
* LONG 2015년 11월 28일 (토) 오후 9시 15분 13초
* MEDIUM 2015. 11. 28 오후 9:15:13
* SHORT 15. 11. 28 오후 9:15
*/
@Order(2)
@Test
void localeTest() {
printMethodName("localeTest");
LocalDate date = LocalDate.of(2015, 1, 1);
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
String shortFormat = formatter.format(date);
System.out.println(shortFormat); // 15. 1. 1.
}
출력형식 직접 정의하기
DatetimeFormatter의 ofPattern()으로 원하는 출력형식을 직접 작성할 수 있습니다.
/**
* title : 출력형식 직접 정의하기 - ofPattern() 메서드
* DateTimeFormatter 클래스 메서드
* DateTimeFormatter DateTimeFormatter.ofPattern(String pattern)
* : 날짜와 시간에 대한 형식화를 직접 설정하여 DateTimeFormatter 인스턴스 반환
*
* DateTimeFormatter의 패턴에 사용되는 기호 목록
* - https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
*/
@Order(3)
@Test
void ofPatternMethodTest() {
printMethodName("ofPatternMethodTest");
ZonedDateTime zdateTime = ZonedDateTime.now();
String[] patternArr = {
"yyyy-MM-dd HH:mm:ss",
"''yy년 MMM dd일 E요일",
"yyyy-MM-dd HH:mm:ss.SSS Z VV",
"yyyy-MM-dd hh:mm:ss a",
"오늘은 올 해의 D번째 날입니다.",
"오늘은 이 달의 d번째 날입니다.",
"오늘은 올 해의 w번째 주입니다.",
"오늘은 이 달의 W번째 주입니다.",
"오늘은 이 달의 W번째 E요일입니다."
};
for(String p : patternArr) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(p);
System.out.println(zdateTime.format(formatter));
}
// 2022-06-21 13:11:55
// '22년 6월 21일 화요일
// 2022-06-21 13:11:55.699 +0900 Asia/Seoul
// 2022-06-21 01:11:55 오후
// 오늘은 올 해의 172번째 날입니다.
// 오늘은 이 달의 21번째 날입니다.
// 오늘은 올 해의 26번째 주입니다.
// 오늘은 이 달의 4번째 주입니다.
// 오늘은 이 달의 4번째 화요일입니다.
}
문자열을 날짜와 시간으로 파싱하기
문자열을 날짜 또는 시간으로 변환하려면 static 메서드 parse()를 사용하면 됩니다.
/**
* title : 문자열을 날짜와 시간으로 파싱하기
* LocalDateTime 인스턴스 메서드
* static LocalDateTime parse(CharSequence text) : 기본적인 형식으로 파싱
* static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter) : 지정된 형식으로 파싱
*
* LocalDate, LocalTime도 parse() 메서드 사용가능함
*/
@Order(4)
@Test
void DateTimeFormatterPasingTest() {
printMethodName("DateTimeFormatterPasingTest");
// DateTimeFormmater에 상수로 정의된 형식 사용
LocalDate date = LocalDate.parse("2016-01-02", DateTimeFormatter.ISO_LOCAL_DATE);
// 자주 사용되는 기본적인 형식의 문자열은 ISO_LOCAL_DATE와 같은 형식화 상수를 사용하지 않고도 파싱이 가능함
LocalDate newDate = LocalDate.parse("2001-01-01");
LocalTime newTime = LocalTime.parse("23:59:59");
LocalDateTime newDateTime = LocalDateTime.parse("2001-01-01T23:59:59");
System.out.println("date : " + date); // 2016-01-02
System.out.println("newDate : " + newDate); // 2001-01-01
System.out.println("newTime : " + newTime); // 23:59:59
System.out.println("newDateTime : " + newDateTime); // 2001-01-01T23:59:59
}
References
source code : https://github.com/yonghwankim-dev/java_study/tree/main/ch10
[도서] Java의 정석, 남궁 성 지음
'JAVA > Language' 카테고리의 다른 글
[Java][I/O] 바이트기반 스트림, InputStream & OutputStream (0) | 2022.06.22 |
---|---|
[Java][I/O] 자바에서의 입출력 (0) | 2022.06.22 |
[Java][time] Period와 Duration 클래스 (0) | 2022.06.21 |
[Java][time] LocalDateTime & ZonedDateTime 클래스, TemporalAdjusters 클래스 (0) | 2022.06.20 |
[Java][time] Instant 클래스 (0) | 2022.06.16 |