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;
}
}
카페 게시글
◆ 자바소스강좌
날짜관련함수 - 날짜간의 차이, 요일구하기, 윤년체크
자바짱
추천 0
조회 661
05.06.30 15:01
댓글 4
북마크
번역하기
공유하기
기능 더보기
다음검색
첫댓글 오늘이 올해의 몇주차인지 계산하는 방법은 올해 1월 1일을 일로 바꾼것과 오늘의 날짜를 일로 바꾼 것의 차이를 구하면(정확히는 하루를 빼주어야함) 오늘이 올해의 몇일 째인지를 구할수 있죠. 그 차이를 day라고 할때 (day + 요일값) / 7 + ((day + 요일값) / 7 == 0)? 0: 1하면 됩니다.
여기서 요일 값은 0~6의 값이며, 일요일은 0이고 토요일이 6입니다.
특정날짜에서 n개월 전후를 구하는 함수도 만들어보시기 바랍니다.
일은 놔두고 년과 월을 월로변환해서 처리하고 일을 붙이면 되겠죠.