자바 날짜 비교

우연히 서버쪽 유지 보수 일을 하게 되어 자주 만나는 요구사항이다. 오래된 소스 코드이다 보니 하드 코딩 되어 있는 부분이 많다.

자바 연습장: https://dev.java/playground/

오늘이 주말인지 확인하기 (주말과 평일을 다르게 적용해 주세요.)

요구사항을 보면 주말과 평일을 다르게 적용해 달라는 것도 많은 거 같다.

Calendar today = Calendar.getInstance(); // 현재 시간

int dayOfWeek = today.get(Calendar.DAY_OF_WEEK);

if(dayOfWeek == 1 || dayOfWeek == 7) {
  System.out.println("오늘은 주말입니다.");
} else {
  System.out.println("오늘은 평일입니다.");
}

Calendar.DAY_OF_WEEK은 1, 2, 3, 4, 5, 6, 7로 1 ~ 7은 일요일부터 토요일을 의미한다. 따라서 dayOfWeek의 값이 1과 7이면 주말, 아니면 평일이다.

특정 날짜부터 적용해 주세요.

주말인지 평일인지 보다 더 많이 들어오는 요청인데, 특정 날짜에 몇시부터 적용해 달라는 요구사항이다. 2025년 6월 27일 이후로 적용해 주세요.

Calendar today = Calendar.getInstance(); // 현재 시간
Calendar target = Calendar.getInstance();

// 비교할 날짜 설정 (예: 2025년 6월 27일)
target.set(2025, 5, 27, 0, 0, 0);

if(today.after(target)) {
  System.out.println("2025년 6월 27일 이후 입니다.");
}

특정 날짜부터 특정 날짜까지 적용해 주세요.

Calendar today = Calendar.getInstance(); // 현재 시간
Calendar startDate = Calendar.getInstance();
Calendar endDate = Calendar.getInstance();

// 시작 날짜 설정 6월 27일 부터
startDate.set(2025, 5, 27, 0, 0, 0);

// 종료 날짜 설정 7월 2일 까지
endDate.set(2025, 6, 3, 0, 0, 0);

if(today.after(startDate) && today.before(endDate)) {
  System.out.println("6월 27일 ~ 7월 2일 까지");
} else {
  System.out.println("out");
}

월 부분은 0부터 시작해서 -1을 해야 한다.

특정 시간에만 적용해 주세요.

Calendar now = Calendar.getInstance(); // 현재 시간
int hour = now.get(Calendar.HOUR_OF_DAY); // 0~23

// 예시 1 시에서 5시 사이
if(hour >= 1 && hour < 5) {
   // 적용할 코드
}

특정 기간 동안 주말 오전 9시 이후로 적용해 주세요. (특정 기간, 특정 날)

// 비교를 위한 특정 날짜 설정
Calendar startDate = Calendar.getInstance();
startDate.set(2025, Calendar.AUGUST, 19, 0, 0, 0); // 월은 0부터 시작 (8월은 7)

Calendar endDate = Calendar.getInstance();
endDate.set(2025, Calendar.SEPTEMBER, 30, 23, 59, 59); // 월은 0부터 시작 (9월은 8)
                                                                // 9월의 마지막 날짜를 30일로 수정

// 현재 날짜 및 시간 가져오기
Calendar currentDateTime = Calendar.getInstance();

// 오늘 오전 9시 1분 시간을 설정 (비교용)
Calendar nineAmToday = Calendar.getInstance();
nineAmToday.set(Calendar.HOUR_OF_DAY, 9);
nineAmToday.set(Calendar.MINUTE, 1);
nineAmToday.set(Calendar.SECOND, 0);
nineAmToday.set(Calendar.MILLISECOND, 0); // 정확한 비교를 위해 밀리초를 0으로 설정하는 것이 중요

// 요일 가져오기
int dayOfWeek = currentDateTime.get(Calendar.DAY_OF_WEEK);

// 일요일이거나 토요일 오전 9시 이후인지 확인
boolean isSunday = (dayOfWeek == Calendar.SUNDAY);
boolean isSaturdayAfter9AM = (dayOfWeek == Calendar.SATURDAY && currentDateTime.after(nineAmToday));

if (isSunday || isSaturdayAfter9AM) {
    System.out.println("주말 9시 이후입니다.");
} else {
    System.out.println("주말 9시 이후가 아닙니다.");
}

그 외

Calendar cal = Calendar.getInstance();

int year = cal.get(Calendar.YEAR);           // 2025
int month = cal.get(Calendar.MONTH) + 1;     // 1~12 (주의: 0부터 시작)
int date = cal.get(Calendar.DATE);           // 1~31
int hour = cal.get(Calendar.HOUR_OF_DAY);    // 0~23
int minute = cal.get(Calendar.MINUTE);       // 0~59
int second = cal.get(Calendar.SECOND);       // 0~59
int dow = cal.get(Calendar.DAY_OF_WEEK);     // 1=일, 2=월, ..., 7=토

카테고리: java

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다