2013-06-10 2 views
2

Java에서 한 달의 평일 서수를 결정하려고합니다. 즉, 금요일이 한 달의 첫 번째 또는 세 번째 금요일 일 경우.Java에서 한 달의 특정 요일의 순차 번호를 계산하는 방법

자바 캘린더 및 게시물에서 찾을 수있는 모든 것을 읽은 후 간단한 방법을 찾을 수 없습니다. 내가 생각할 수있는 한 가지 방법은이 달의 첫 번째 주에 이번 달에 몇 일이 있었는지 확인한 다음 문제의 날이 어느 날인지에 따라 week_of_month를 조정하는 것입니다. 그러나 조금 복잡한 계산이 필요합니다. 누구나 간단한 해결책을 알고 있습니까?

답변

6

그냥 1 일을 빼고 7을 나눈 다음 1을 더합니다.이 첫 7 일은 입니다. 항상 첫 번째 요일 (화요일, 수요일 ...) 그 달의 실제 1 일입니다.

public int getWeekOfWeekDay(LocalDate date) { 
    return ((date.getDayOfMonth() - 1)/7) + 1; 
} 

을 ...하지만 당신은 Calendar을 사용하고 Calendar.DAY_OF_MONTH 필드의 값을 가져 오는 동일한 기능을 수행 할 수 있습니다 :

개인적으로 난 Joda 시간을 사용하십시오.

편집 : 실제로, 나는 변경을 위해 실제로 java.util.Calendar이 Joda Time보다 간단하다는 것을 알아 차렸습니다. 특정 필드가 있습니다! 당신이 필요로하는 것입니다 : DAY_OF_WEEK_IN_MONTH에 대한 문서에서

int weekOfWeekDay = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH); 

: 현재 월 내에서 요일의 서수를 나타내는 get 및 set를위한

필드 번호. DAY_OF_WEEK 필드와 함께 한 달 내에 하루를 고유하게 지정합니다. WEEK_OF_MONTH 및 WEEK_OF_YEAR와 달리이 필드의 값은 getFirstDayOfWeek() 또는 getMinimalDaysInFirstWeek()에 의존하지 않습니다. DAY_OF_MONTH 1 - 7은 항상 DAY_OF_WEEK_IN_MONTH 1에 해당합니다. 8 ~ 14는 DAY_OF_WEEK_IN_MONTH 2에 해당합니다.

나는 내가 모든 라운드 단지 훨씬 더 좋은 API이기 때문에 Joda 시간 버전을 사용 아마도 여전히을 거라고 생각하지만, 당신이 있다면 적어도 하나에서이 작업을 수행 할 수 Calendar를 사용하는을 강제 샷.

+0

멋진 트릭, Jon Skeet style +1 – Pragmateek

관련 문제