기억력이 점점 떨어지는 관계로
기록 차원에 남기는 소소한 팁(?).
Date 관련해서는 Date, Calendar, LocalDate 등의 기본 클래스와 JodaTime와 같은 써드파티 라이브러리 등
여러 가지 라이브러리가 존재하고
동일한 결과를 얻을 수 있는 라이브러리들의 사용법 또한 여러 가지라
뭔가 필요할 때마 검색하거나 이전 소스를 뒤적거려야 하게 되는데 조금씩이라도 정리해 놓고 나중에 참고할 목적으로 올립니다.
@Test
public void dateTest() {
// 현재월의 첫번째 일자 - use Calendar
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DateUtil.YYYY_MM_DD);
String startDate = simpleDateFormat.format(calendar.getTime());
System.out.println(startDate); // 2021-06-01
// 현재월의 첫번째 일자 - use LocalDate
LocalDate firstDate = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
String firstDateString = firstDate.format(DateTimeFormatter.ISO_DATE);
System.out.println(firstDateString); // 2021-06-01
// 현재월의 마지막 일자
LocalDate lastdDate = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
String lastDateString = lastdDate.format(DateTimeFormatter.ISO_DATE);
System.out.println(lastDateString); // 2021-06-30
// 현재월의 첫번째 월요일인 날짜.
LocalDate dateOfFirstMonday = LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
System.out.println(dateOfFirstMonday); // 2021-06-07
}
현재 월의 첫 번째 날짜, 즉 1일과 말일을 가져오기 위해서
Calendar과 LocalDate를 비교한 간단한 테스트 코드입니다.
코드만 보더라도,
LocalDate를 사용한 방법이 훨씬 간단하며, 코드가 직관적입니다.
TemporalAdjusters.firstDayOfMonth() -> 해당월의 첫번째 날짜 TemporalAdjusters.lastDayOfMonth() -> 해당월의 마지막 날짜 |
이런 직관적인 함수들 너무 맘에 드네요.
이렇게도 사용해서 '현재 월의 첫 번째 월요일인 날짜'등 다양한 조건의 날짜들을 가져올 수 있습니다.
LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)) |
JodaTime 라이브러리도 다양하고, 간편하나 날짜 관련 기능들을 제공하는 훌륭한 라이브러리이긴 하지만
Java8 이후로 Date관련 클래스들의 기능이 많이 개선되어, 잘 찾아서 사용하면 굳이 써드파티의 힘을 빌리지 않아도 될 것 같습니다.
JodaTime - https://www.joda.org/joda-time/
최근댓글