티스토리 뷰

반응형

← 목차로 돌아가기

 

Java에서 날짜, 시간 제대로 다루기

개요 기존 Date 클래스와 Calendar 클래스는 날짜와 Timezone 관련되어 개발자를 헷갈리게 하는 부분이 많아 쓰는 것을 지양해야 한다. 위에 대한 대체제로 LocalDateTime, LocalDate, LocalTime가 java 1.8에서..

dev-cho.tistory.com


 

1. LocalDate 만들기

객체 생성 정적 메서드를 이용하여 LocalDate 인스턴스를 만든다. 아래는 가장 많이 쓰이는 4가지 유형을 소개한다.

/* 직접 지정하여 만들기 */
LocalDate date = LocalDate.of(2021, 1, 26);

/* String을 LocalDate로 만들기 */
LocalDate dateParse = LocalDate.parse("2020-01-26");

/* DateFormatter을 지정하여 String을 LocalDate로 만들기 */
LocalDate dateParseWithFormatter = LocalDate.parse("2021-01-26", DateTimeFormatter.ISO_DATE);

/* 현재 시간을 LocalDate로 만들기 */
LocalDate dateNow = LocalDate.now();

 

2. LocalDate 에서 값 읽기

LocalDate는 날짜 값을 읽는 여러 메서드를 제공한다.

  • LocalDate에서 직접 변수에 접근하여 읽는 방법
  • ChronoField라 부르는 TemporalField를 이용하여 읽는 방법
LocalDate date = LocalDate.of(2021,1,21);
/* 년 출력하기 */
int year = date.getYear(); // 2021
int yearTempField = date.get(ChronoField.YEAR) // 2021  - Temporal Field를 이용하여 읽음

/* 월 출력하기 */
Month monthInstance = date.getMonth(); // January
int month = monthInstance.getValue(); // 1
int monthTempField = date.get(ChronoField.MONTH_OF_YEAR); // 1 - Temporal Field 이용하여 읽음

/* 일 출력하기 */
int day= date.getDayOfMonth(); // 21
int dayTempField = date.get(ChronoField.DAY_OF_MONTH) // 21 - Temporal Field 이용하여 읽음

/* 요일 출력하기 */
DayOfWeek dayOfWeek = date.getDayOfWeek(); // TuesDay

 

3. LocalDate 속성 바꾸기

LocalDate는 불변객체이다. 따라서 속성값( 연, 월, 일 )을 바꾸려면 새로운 객체를 생성해 할당하거나 기존 객체에 재할당 해야 한다. 아래에서는 새로운 객체를 생성해 할당했다.

  • 특정 값으로 바꾸기
LocalDate date = LocalDate.of(2021,1,21);

/* 속성 하나씩 바꾸기 */
LocalDate newDate1 = date.withYear(2029); // 2029 - 1 - 21
LocalDate newDate2 = date.withMonth(9); // 2021 - 9 - 21
LocalDate newDate3 = date.withDayOfMonth(29); // 2021 - 1- 29

/* 속성 연쇄적으로 바꾸기 */
LocalDate newDate4 = date.withYear(2029).withMonth(9).withDayOfMonth(29);; // 2029 - 9 - 29

 

  • 상대 값으로 바꾸기
LocalDate date = LocalDate.of(2021,1,21);

LocalDate date1 = date.plusYears(1); // 2022 - 1 - 21
LocalDate date2 = date.plusMonths(1); // 2021 - 2 - 21
LocalDate date3 = date.plusWeeks(1); // 2021 - 1 - 28        
LocalDate date4 = date.plusDays(1); // 2021 - 1 - 22

 

4. LocalDate 포메팅

개요

<1. LocalDate 만들기>에서 parse 정적 메서드 사용 시, date formatter을 이용하여 LocalDate를 만드는 방법에 대해 간단히 다루었다.

LocalDate dateParseWithFormatter = LocalDate.parse("2021-01-26", DateTimeFormatter.ISO_DATE);

LocalDate는 DateTimeFormatter을 이용하여 포메팅이 가능하다. 따라서 다양한 Pattern의 날짜도 모두 LocalDate로 변환이 가능하다.

DateTimeFormatter은 LocalDate, LocalTime, LocalDateTime 모두에서 사용 가능하다.

 

LocalDate 포메팅 하기

LocalDate를 포메팅 하기 위해서는 Format이 필요하다.

Format을 만들 때는 DateTimeFormatter.ofPattern()메서드를 사용하여 Format을 만든다. 아래는 예시이다.

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate dateParseWithFormatter = LocalDate.parse("26/01/2021", dateTimeFormatter);

마찬가지로 출력 시에도 이를 이용하면 다양한 형태로 출력이 가능하다.

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate dateParseWithFormatter = LocalDate.parse("26/01/2021", dateTimeFormatter);
System.out.println(dateParseWithFormatter.toString()); // 2021-01-26
System.out.println(dateParseWithFormatter.format(dateTimeFormatter)); // 26/01/2021

DateTimeFormatter에 Locale(지역)을 설정하면 각 Locale에 해당하는 언어로 출력이 가능하다.

DateTimeFormatter dateTimeFormatterKorea = DateTimeFormatter.ofPattern("yyyy/MMMM/dd", Locale.KOREA);
System.out.println(dateParseWithFormatter.format(dateTimeFormatterKorea)) // 2021/1월/26;
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함