package com.jason.common.test;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateBean {
private final static int MONTH_DAYS[] = { 29 , 30 };
private final static int DAYS_MONTH[][] = {
{ 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 },
{ 31 , 29 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 }
};
private final static int DATAS[][] = {
{ 23 , 3 , 2 , 17 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 1 , 0 },
{ 41 , 0 , 4 , 23 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 0 , 1 },
{ 30 , 7 , 5 , 28 , 1 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 },
{ 49 , 0 , 6 , 33 , 1 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 },
{ 38 , 0 , 0 , 38 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 },
{ 26 , 6 , 2 , 44 , 1 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 },
{ 45 , 0 , 3 , 49 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 },
{ 35 , 0 , 4 , 54 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 },
{ 24 , 4 , 5 , 59 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 },
{ 43 , 0 , 0 , 5 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 0 , 1 , 1 },
{ 32 , 0 , 1 , 10 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 },
{ 21 , 2 , 2 , 15 , 1 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 },
{ 40 , 0 , 3 , 20 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 },
{ 28 , 7 , 5 , 26 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 },
{ 47 , 0 , 6 , 31 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 },
{ 36 , 0 , 0 , 36 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 },
{ 26 , 5 , 1 , 41 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 },
{ 44 , 0 , 3 , 47 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 },
{ 33 , 0 , 4 , 52 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 },
{ 23 , 3 , 5 , 57 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 },
{ 42 , 0 , 6 , 2 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 },
{ 30 , 8 , 1 , 8 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 0 },
{ 48 , 0 , 2 , 13 , 1 , 1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 0 },
{ 38 , 0 , 3 , 18 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 },
{ 27 , 6 , 4 , 23 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 },
{ 45 , 0 , 6 , 29 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 },
{ 35 , 0 , 0 , 34 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 },
{ 24 , 4 , 1 , 39 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 , 0 },
{ 43 , 0 , 2 , 44 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 , 0 },
{ 32 , 0 , 4 , 50 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 1 },
{ 20 , 3 , 5 , 55 , 1 , 1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 },
{ 39 , 0 , 6 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 0 },
{ 29 , 7 , 0 , 5 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 },
{ 47 , 0 , 2 , 11 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 },
{ 36 , 0 , 3 , 16 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 , 0 },
{ 26 , 5 , 4 , 21 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 , 0 , 1 },
{ 45 , 0 , 5 , 26 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 },
{ 33 , 0 , 0 , 32 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 1 },
{ 22 , 4 , 1 , 37 , 1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 1 },
{ 41 , 0 , 2 , 42 , 1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 },
{ 30 , 8 , 3 , 47 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 },
{ 48 , 0 , 5 , 53 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 1 },
{ 37 , 0 , 6 , 58 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 },
{ 27 , 6 , 0 , 3 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 , 0 },
{ 46 , 0 , 1 , 8 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 },
{ 35 , 0 , 3 , 14 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 1 },
{ 24 , 4 , 4 , 19 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 1 },
{ 43 , 0 , 5 , 24 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 1 },
{ 32 , 10 , 6 , 29 , 1 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 },
{ 50 , 0 , 1 , 35 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 },
{ 39 , 0 , 2 , 40 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 1 },
{ 28 , 6 , 3 , 45 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 0 },
{ 47 , 0 , 4 , 50 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 },
{ 36 , 0 , 6 , 56 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 1 , 0 },
{ 26 , 5 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 1 },
{ 45 , 0 , 1 , 6 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 0 },
{ 34 , 0 , 2 , 11 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 },
{ 22 , 3 , 4 , 17 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 },
{ 40 , 0 , 5 , 22 , 1 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 },
{ 30 , 8 , 6 , 27 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 1 },
{ 49 , 0 , 0 , 32 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 0 , 1 },
{ 37 , 0 , 2 , 38 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 },
{ 27 , 5 , 3 , 43 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 },
{ 46 , 0 , 4 , 48 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 0 , 1 },
{ 35 , 0 , 5 , 53 , 1 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 },
{ 23 , 4 , 0 , 59 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 },
{ 42 , 0 , 1 , 4 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 },
{ 31 , 0 , 2 , 9 , 1 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 },
{ 21 , 2 , 3 , 14 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 },
{ 39 , 0 , 5 , 20 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 },
{ 28 , 7 , 6 , 25 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 },
{ 48 , 0 , 0 , 30 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 0 , 1 , 1 },
{ 37 , 0 , 1 , 35 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 },
{ 25 , 5 , 3 , 41 , 1 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 },
{ 44 , 0 , 4 , 46 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 },
{ 33 , 0 , 5 , 51 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 },
{ 22 , 4 , 6 , 56 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 },
{ 40 , 0 , 1 , 2 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 },
{ 30 , 9 , 2 , 7 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 },
{ 49 , 0 , 3 , 12 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 0 , 1 , 0 , 1 },
{ 38 , 0 , 4 , 17 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 },
{ 27 , 6 , 6 , 23 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 },
{ 46 , 0 , 0 , 28 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 },
{ 35 , 0 , 1 , 33 , 0 , 1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 },
{ 24 , 4 , 2 , 38 , 0 , 1 , 1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 },
{ 42 , 0 , 4 , 44 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 },
{ 31 , 0 , 5 , 49 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 },
{ 21 , 2 , 6 , 54 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 },
{ 40 , 0 , 0 , 59 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 1 },
{ 28 , 6 , 2 , 5 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 , 0 },
{ 47 , 0 , 3 , 10 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 1 , 0 , 1 },
{ 36 , 0 , 4 , 15 , 1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 1 },
{ 25 , 5 , 5 , 20 , 1 , 1 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 },
{ 43 , 0 , 0 , 26 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 0 , 1 , 0 , 1 },
{ 32 , 0 , 1 , 31 , 1 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 0 },
{ 22 , 3 , 2 , 36 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 0 , 1 , 0 }
};
public static Date getGregorianCalendar(String date) {
Calendar c = getCalendar(date);
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1 ;
int day = c.get(Calendar.DAY_OF_MONTH);
int index = year - 1936 ;
int endIndex = month;
if ((DATAS[index][ 1 ] != 0 ) && (month > DATAS[index][ 1 ])) {
endIndex ++ ;
}
int dayNum = 0 ;
for ( int i = 0 ; i < (endIndex - 1 ); i ++ ) {
dayNum += MONTH_DAYS[DATAS[index][ 4 + i]];
}
dayNum += day;
dayNum += DATAS[index][ 0 ];
int year_days = 365 ;
if (isLeapYear(year)) {
year_days = 366 ;
}
if (dayNum > year_days) {
year ++ ;
dayNum -= year_days;
}
month = 1 ;
int dayOfMonth[] = DAYS_MONTH[ 0 ];
if (isLeapYear(year)) {
dayOfMonth = DAYS_MONTH[ 1 ];
}
int i = 0 ;
for (; i < 12 ; i ++ ) {
dayNum -= dayOfMonth[i];
if (dayNum <= 0 ) {
break ;
}
month ++ ;
}
day = dayOfMonth[i] + dayNum;
return getDate(year + " - " + month + " - " + day);
}
public static Date getLunarCalendar(String date) {
Calendar calendar = getCalendar(date);
int year = calendar.get(Calendar.YEAR);
int month = 1 ;
int day;
if ((year < 1936 ) || (year > 2028 )) {
return null ;
}
int index = year - 1936 ;
int l_days = DATAS[index][ 0 ];
int day_year = calendar.get(Calendar.DAY_OF_YEAR);
int days;
if (day_year >= l_days) {
days = day_year - l_days;
} else {
index -- ;
year -- ;
Calendar c = getCalendar(year + " -12-31 " );
days = (c.get((Calendar.DAY_OF_YEAR)) + day_year) -
DATAS[index][ 0 ];
}
int i = 0 ;
int day_num = 0 ;
for (; i < 13 ; i ++ ) {
day_num += MONTH_DAYS[DATAS[index][i + 4 ]];
if (day_num >= days) {
break ;
}
month ++ ;
}
day = MONTH_DAYS[DATAS[index][i + 4 ]] - (day_num - days);
if ((DATAS[index][ 1 ] != 0 ) && (month > DATAS[index][ 1 ])) {
month -- ;
}
return getDate(year + " - " + month + " - " + day);
}
private static Calendar getCalendar(String date) {
Date dd = getDate(date);
Calendar calendar = Calendar.getInstance();
calendar.setTime(dd);
return calendar;
}
private static Date getDate(String date) {
DateFormat format = new SimpleDateFormat( " yyyy-MM-dd " );
Date dd = null ;
try {
dd = format.parse(date);
} catch (Exception e) {
e.printStackTrace();
}
return dd;
}
private static boolean isLeapYear( int year) {
if ((year % 400 ) == 0 ) {
return true ;
}
else if ((year % 100 ) == 0 ) {
return false ;
}
else if ((year % 4 ) == 0 ) {
return true ;
}
return false ;
}
}