[개발환경]
JDK 1.8
spring 2.0
mariaDB 10.x
[배경]
날짜를 계산해야하는 업무가 할당됨. 날짜 뿐 아니라 요일이 같이 설정되야 하는 일이었음.
마리아DB를 사용하다보니 DAYOFWEEK(date)와 WEEKDAY(date)를 사용할 수 있음
DAYOFWEEK(date) : (1 = Sunday, 2 = Monday, ..., 7 = Saturday)
WEEKDAY(date) : (0 = Monday, 1 = Tuesday, ... 6 = Sunday)
WEEKDAY를 사용하기로 하고 개발 착수. 당연히 월요일은 0부터 시작 일요일은 6임.
우선적으로 java.util.Calendar 클래스를 사용하여 숫자를 얻어옴.
int day = c.get(Calendar.DAY_OF_WEEK);
월요일이 2임.......... 엉?
java.util.Calendar 클래스에서 DAY_OF_WEEK을 사용하여 값을 할당 받으면
일요일1부터 토요일 7까지 값을 줌.
원하는게 아님.
좀 더 찾다보니 월요일이 0부터 시작하는 건 java.time.DAY_OF_WEEK 열거자임
허나 이 열거자에서 값을 읽어오려면 java.time.LocalDate 에서 읽어야 함.
Calendar c = Calendar.getInstance();
c.setTime(this.startDate);
//1 SundayStart (1 = Sunday, 2 = Monday, ..., 7 = Saturday)
int day = c.get(Calendar.DAY_OF_WEEK);
//2 MondayStart (1 = Monday, 2 = Tuesday, ... 7 = Sunday)
int day_of_monday_start = c.getTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().getDayOfWeek().getValue();
//3 SundayStart in localdate (1 = Sunday, 2 = Monday, ..., 7 = Saturday)
int day_of_sunday_start = c.getTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().get(WeekFields.SUNDAY_START.dayOfWeek());