티스토리 뷰

반응형

이전 글에서 날짜와 시간을 관여하는 클래스들을 살펴보았다면 이번 글에서는 연관되어 있는 클래스들을 살펴보려 합니다.

날짜 가져오기

LocalDate.now(); // 오늘
LocalDateTime.now(); // 지금
Year.of(2021).atMonth(6).atDay(30).atTime(10, 23); // 2021년 6월 30일 10시 23분

기간 가져오기

Period.ofYears(2); // 2년간
Period.ofMonths(5); // 5개월간
Period.ofWeeks(4); // 4주간
Period.ofDays(15); // 15일간

Duration.ofDays(2); // 48시간
Duration.ofHours(10); // 10시간
Duration.ofMinutes(27); // 27분간
Duration.ofSeconds(888); // 888초간

저번 글에도 작성하였지만 plus와 minus 연산을 하여 시간을 계산해보겠습니다.

날짜 + 기간 = 날짜

LocalTime.of(9, 21, 15).plus(Duration.ofMinutes(12)); // (9시21분15초) + (12분) = 9시33분15초
LocalDate.of(2021, 6, 30).plus(Period.ofDays(3)); // (2021년6월30일) + (3일) = 2021년7월3일
LocalDateTime.of(2021, 6, 30, 10, 28, 32) // 2021년6월30일 10시28분32초
   .minus(Period.ofWeeks(3)) // - 3주 = 2021년6월9일 10시28분32초
   .plus(Duration.ofSeconds(27)); // + 27초 = 2021년6월9일 10시28분59초
   
LocalDate.now().plusDays(1); // (오늘 + 1일) = 내일
LocalTime.now().minusHours(5); // (지금 - 5시간) = 5시간 전

날짜 변환

* LocalDate -> String

String parse = 
LocalDate.of(2021, 6, 30)
   .format(DateTimeFormatter.BASIC_ISO_DATE); // 20210630

* LocalDateTime -> String

String parse = 
LocalDateTime.now()
   .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
      // 2021-06-30 10:40:23

* LocalDateTime -> java.util.Date

Date dt = 
Date.from(LocalDateTime.now()
   .atZOne(ZoneId.systemDefault())
   .toInstant()); // Wed Jun 30 01:40:23 KST 2021

* LocalDate -> java.sql.Date

Date dt = 
Date.valueOf(LocalDate.of(2021, 06, 30)); // 2021-06-30

* LocalDateTime -> java.sql.Timestamp

Timestamp ts =
Timestamp.valueOf(LocalDateTime.now()); // 2021-06-30 10:40:23.355

* String -> LocalDate

LocalDate ld1 = 
LocalDate.parse("2021-06-30"); // 2021년6월30일

LocalDate ld2 = 
LocalDate.parse("20210511", DateTimeFormatter.BASIC_ISO_DATE); // 2021년5월11일

* String -> LocalDateTime

LocalDateTime ldt1 = 
LocalDateTime.parse("2021-06-30T10:30:11"); // 2021년6월30일 10시30분11초

LocalDateTime ldt2 = 
LocalDateTime.parse("2014-11-21 12:34:56", 
   DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
      // 2014년11월21일 12시34분56초

* java.util.Date -> LocalDateTime

LocalDateTime now = 
LocalDateTime.ofInstant(new Date().toInstant(), ZoneId.systemDefault());
   // 2021-06-30 10:48:55.113

* java.sql.Date -> LocalDate

LocalDate ld = 
new Date(System.currentTimeMillis()).toLocalDate();
   // 2021-06-30

* java.sql.Timestamp -> LocalDateTime

Timestamp ts = 
new Timestamp(System.currentTimeMillis()).toLocalDateTime();
   // 2021-06-30T10:53:41.312

* LocalDateTime -> LocalDate

LocalDate ld = 
LocalDate.from(LocalDateTime.now()); // 2021-06-30

* LocalDate -> LocalDateTime

LocalDateTime ldt = 
LocalDate.now().atTime(10, 55); // 2021-06-30T10:55

요일로 날짜 가져오기

// 다음 일요일
LocalDate nextSunday = 
LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.SUNDAY));

// 2021년 6월의 두번째 화요일(2021-06-08)
LocalDate secondTuesday =
LocalDate.of(2021, 6, 30).with(TemporalAdjusters.dayOfWeekInMonth(2, DayOfWeek.TUESDAY));

// 2021년 6월의 첫번째 월요일(2021-06-07)
LocalDate firstMonday =
LocalDAte.of(2021, 6, 6).with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); 

마지막으로 언어별로 출력하는 방법입니다.

// Monday
DayOfWeek.MONDAY.getDisplayName(TextStyle.FULL, Locale.ENGLISH);

// M
DayOfWeek.MONDAY.getDisplayName(TextStyle.NARROW, Locale.ENGLISH);

// Mon
DayOfWeek.MONDAY.getDisplayName(TextStyle.SHORT, Locale.ENGLISH);

// 월요일
DayOfWeek.MONDAY.getDisplayName(TextStyle.FULL, Locale.ENKOREANGLISH);

// 월
DayOfWeek.MONDAY.getDisplayName(TextStyle.NARROW, Locale.KOREAN);

// 월
DayOfWeek.MONDAY.getDisplayName(TextStyle.SHORT, Locale.KOREAN);

// February
Month.FEBRUARY.getDisplayName(TextStyle.FULL, Locale.US);

// 2월
Month.FEBRUARY.getDisplayName(TextStyle.FULL, Locale.KOREA);
반응형
댓글
공지사항