CAFE

◆ 자바소스강좌

날짜관련함수 - 날짜간의 차이, 요일구하기, 윤년체크

작성자자바짱|작성시간05.06.30|조회수684 목록 댓글 4
import java.util.*;

class DateTest
{
      public static void main(String[] args)
      {
            int year=2004;
            int month = 4;
            int day = 31;

            System.out.println("2004. 5. 31 :" + getDayOfWeek(2004, 5, 31));
            System.out.println("2002. 6. 1 :" + getDayOfWeek(2002, 6, 1));
            System.out.println("1972. 1. 2 :" + getDayOfWeek(1972, 1, 2));
            System.out.println("2004. 5. 1 - 2004.4.28 :" + dayDiff("2004-05-01", "2004-04-28"));
            System.out.println("2004. 6. 10 - 2004.6.3 :" + dayDiff("2004-06-10", "2004-06-03"));

            System.out.println("2005. 6. 29 : "+convertDateToDay(2005, 6, 29));
            System.out.println("732126 : "+convertDayToDate(732126));
            System.out.println("2005. 6. 29 : "+convertDayToDate(convertDateToDay(2005, 6, 29)));
            System.out.println("2005. 2. 28 : "+convertDayToDate(convertDateToDay(2005, 2, 28)));
            System.out.println("2004. 2. 29 : "+convertDayToDate(convertDateToDay(2004, 2, 29)));
            System.out.println("2001. 12. 31 : "+convertDayToDate(convertDateToDay(2001, 12, 31)));
            System.out.println("2002. 1. 1 : "+convertDayToDate(convertDateToDay(2002, 1, 1)));
      }

            // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
      public static int[] endOfMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

      public static boolean isLeapYear(int year) {
            return ((year%4==0)&&(year%100!=0)||(year%400==0));
      }

      public static int dayDiff(String fromDate, String toDate) {
            int year1=0, month1=0, day1=0;
            int year2=0, month2=0, day2=0;

            String[] date1 = fromDate.split("-");
            String[] date2 = toDate.split("-");

            year1 = Integer.parseInt(date1[0]);
            month1 = Integer.parseInt(date1[1]);
            day1 = Integer.parseInt(date1[2]);

            year2 = Integer.parseInt(date2[0]);
            month2 = Integer.parseInt(date2[1]);
            day2 = Integer.parseInt(date2[2]);

            int fromDay = convertDateToDay(year1, month1, day1);
            int toDay = convertDateToDay(year2, month2, day2);
            return fromDay - toDay;
      }

      public static String convertDayToDate(int day) {

            int year=1;
            int month=0;

            int numOfLeapYear =0; // 윤년의 수

            while(true) {
                  int aYear = isLeapYear(year)? 366 :365;
                  if (day > aYear ) {
                        day-= aYear;
                        year++;
                  } else {
                        break;
                  }
            }

            if (day > 0) {
                  while(true) {
                        int endDay = endOfMonth[month];
                        if(isLeapYear(year) && month == 1) endDay++;       // 윤년이고 윤달이 포함되어 있으면, 1일을 더 뺀다.

                        if(day > endDay) {
                              day -= endDay;
                              month++;
                        } else {
                              break;                        
                        }
                  }
            } // if

            return year+"-"+(month+1)+"-"+day;
      }

      public static int convertDateToDay(int year, int month, int day) {
            int numOfLeapYear =0; // 윤년의 수

            // 전년도까지의 윤년의 수를 구한다.
            for(int i=0;i < year; i++) {
                  if(isLeapYear(i))
                        numOfLeapYear++;
            }

            // 전년도까지의 일 수를 구한다.
            int toLastYearDaySum = (year-1) * 365 + numOfLeapYear;

            // 올해의 현재 월까지의 일수 계산
            int thisYearDaySum =0;

            for(int i=0; i < month-1; i++) {
                  thisYearDaySum+=endOfMonth[i];
            }

            // 윤년이고, 2월이 포함되어 있으면 1일을 증가시킨다.
            if (month > 2 && isLeapYear(year)) {
                  thisYearDaySum++;
            }

            thisYearDaySum+=day;

            return toLastYearDaySum+thisYearDaySum-1;
      }


      public static int getDayOfWeek(int year, int month, int day) {
            // 0~6의 값을 반환한다. 결과가 0이면 일요일이다.
            return convertDateToDay(year, month, day)%7;
      }
}
다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
  • 작성자자바짱 작성자 본인 여부 작성자 | 작성시간 05.06.08 오늘이 올해의 몇주차인지 계산하는 방법은 올해 1월 1일을 일로 바꾼것과 오늘의 날짜를 일로 바꾼 것의 차이를 구하면(정확히는 하루를 빼주어야함) 오늘이 올해의 몇일 째인지를 구할수 있죠. 그 차이를 day라고 할때 (day + 요일값) / 7 + ((day + 요일값) / 7 == 0)? 0: 1하면 됩니다.
  • 작성자자바짱 작성자 본인 여부 작성자 | 작성시간 05.06.08 여기서 요일 값은 0~6의 값이며, 일요일은 0이고 토요일이 6입니다.
  • 작성자자바짱 작성자 본인 여부 작성자 | 작성시간 05.07.05 특정날짜에서 n개월 전후를 구하는 함수도 만들어보시기 바랍니다.
  • 작성자자바짱 작성자 본인 여부 작성자 | 작성시간 05.07.11 일은 놔두고 년과 월을 월로변환해서 처리하고 일을 붙이면 되겠죠.
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼