출처1 : https://stackoverflow.com/questions/37795975/java-time-localdate-getdayofweek-to-java-util-calendar-getday-of-week#answer-37796130


[개발환경]

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());






Posted by motolies
,