Java/time

Java time - LocalDateTime 파싱과 포맷

ysk(0soo) 2022. 12. 8. 23:16

파싱과 포맷

  • 날짜와 시간을 원하는 형식으로 출력하고 해석(파싱, parsing)하는 방법
  • 형식화(formatting)와 관련된 클래스들은java.time.format패키지에 들어있음
    • 이 중 DateTimeFormatter가 핵심
LocalDate date = LocalDate.of(2016, 1, 2);

String yyyymmdd = DateTimeFormatter.ISO_LOCAL_DATE.format(date); // "2016-01-02"
String yyyymmdd = date.format(DateTimeFormatter.ISO_LOCAL_DATE); // "2016-01-02"
  • DateTimeFormatter
    • 자주 쓰이는 다양한 형식들을 기본적으로 정의
    • 그 외의 형식이 필요하다면 직접 정의해서 사용할 수 있음
  • DateTimeFormatter에 상수로 정의된 형식들의 목록
DateTimeFormatter 설명 보기
ISO_DATE_TIME Date and time with ZoneId 2019-09-14T08:59:23+09:00[Asia/Seoul]
ISO_LOCAL_DATE ISO Local Date 2019-09-14
ISO_LOCAL_TIME Time without offset 08:59:23
ISO_LOCAL_DATE_TIME ISO Local Date and Time 2019-09-14T08:59:23
ISO_OFFSET_DATE ISO Date with Offset 2019-09-14+09:00
ISO_OFFSET_TIME Time with offset 08:59:23+09:00
ISO_OFFSET_DATE_TIME Date Time with Offset 2019-09-14T08:59:23+09:00
ISO_ZONED_DATE_TIME Zoned Date Time 2019-09-14T08:59:23+09:00[Asia/Seoul]
ISO_INSTANT Date and Time of an Instant 2019-09-14T08:59:23Z
BASIC_ISO_DATE Basic ISO Date 20190914
ISO_DATE ISO Date with or without offset 2019-09-14+09:00 2019-08-14
ISO_TIME Time with or without offset 10:15:30+01:00 10:15:30
ISO_ORDINAL_DATE Year and day of year 2020-349
ISO_WEEK_DATE Year and Week 2020-W51-2
RFC_1123_DATE_TIME RFC 1123 / RFC 822 Wed, 14 NOV 2019 08:59:23 GMT

 

DateTimeFormatter의 static메서드 ofLocalizedDate(), ofLocalizedTime(), ofLocalizedDateTime()

  • 로케일에 종속된 형식화 : 로케일(locale)에 종속된 포메터를 생성
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
String shortFormat = formatter.format(LocalDate.now());
  • 로케일에 종속된 형식화 - FormatStyle의 종류에 따른 출력 형태
FormatStyle 날짜 시간
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

 

출력형식 정의

DateTimeFormatter의 ofPattern()으로 원하는 출력형식을 작성할 수 있다.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
기호 의미 보기
G 연대(BC, AD) 서기 또는 AD
y 또는 u 년도 2015
M 또는 L 월(1~12 또는 1월 ~ 12월) 11
Q 또는 q 분기(quarter) 4
w 년의 몇 번째 주(1~53) 48
W 월의 몇 번째 주(1~5) 4
D 년의 몇 번째 일(1~366) 332
d 월의 몇 번째 일(1~31) 28
F 월의 몇 번째 요일(1~5) 4
E 또는 e 요일 토 또는 7
a 오전/오후(AM, PM) 오후
H 시간(0~23) 22
k 시간(1~24) 22
K 시간(0~11) 10
h 시간(1~12) 10
m 분(0~59) 12
s 초(0~59) 35
S 천 분의 일 초(0~999) 7
A 천 분의 일 초 (그 날의 0시 0분 0초부터의 시간) 80263808
n 나노초(0~999999999) 475000000
N 나노초 (그 날의 0시 0분 0초부터의 시간) 81069992000000
V (VV) 시간대 ID Asia/Seoul
z 시간대(time-zone) 이름 KST
O 지역화된 zone-offset GMT+9
Z zone-offset +0900
X또는 x zone-offSet(Z는 +00:00를 의미) +09
escape 문자 (특수문자를 표현하는데 사용) 없음

 

문자열을 날짜와 시간으로 파싱하기

static LocalDateTime parse(CharSequence text);
static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter);
  • parse() : 문자열을 날짜와 시간으로 파싱하는 메서드
    • 문자열을 날짜 또는 시간으로 변환할 때 사용
    • 오버로딩 된 메서드가 여러개 있다
  • 상수로 정의된 형식을 사용할 때는 다음과 같이 사용한다.
LocalDate date = LocalDate.parse(“2019-08-19”, DateTimeFormatter.ISO_LOCAL_DATE);
  • 자주 사용되는 기본적인 형식의 문자열은 ISO_LOCAL_DATE와 같은 형식화 상수를 사용하지 않아도 됨
LocalDate newDate = LocalDate.parse(“2019-08-19”);
LocalTime newTime = LocalTime.parse(“12:31:30”);
LocalDateTime newDateTime = LocalDateTime.parse(“2019-08-19T12:31:30”);
  • ofPattern()을 이용하여 파싱할 수도 있음
DateTimeFormatter pattern = DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”);
LocalDateTime endOfYear = LocalDateTime.parse(“2019-08-19 12:31:30”, pattern);

 

참조