日付チェック
Calendarクラスのsetメソッドとgetメソッドを使用。
public static boolean checkDate(int year, int month, int day) {
Calendar cal = Calendar.getInstance();
cal.set(year, month-1, day);
if (cal.get(Calendar.YEAR) == year
&& cal.get(Calendar.MONTH) == (month - 1)
&& cal.get(Calendar.DATE) == day) {
return true;
} else {
return false;
}
}
日数の加算・減算
Calendarクラスのadd()メッソドを使用。
public static Date addDate(int year, int month, int day, int diff ) {
Calendar cal = Calendar.getInstance();
cal.set(year, month-1, day);
cal.add(Calendar.DATE, diff); //diffは加算・減算する日数
return cal.getTime();
}
日数差
DateクラスのgetTime()メソッドよりシステム経過秒を求め、その差より日数差を求める。
public static int getDiffDays(Date date1, Date date2) {
long diff = date1.getTime() - date2.getTime();
return (int) (diff/1000/60/60/24);
}
西暦/和暦の変換
西暦から和暦に変換
public static String getJpEra(int year, int month, int day, boolean check) {
//和暦変換テーブル
String warekiTable[][] = {
{"18680908","19120729", "M"}, //明治
{"19120730","19261224", "T"}, //大正
{"19261225","19890107", "S"}, //昭和
{"19890108","99991231", "H"}}; //平成
/*
//1900年以前をエラーとする場合は、コメントをはずす。
if (year < 1900) {
return null;
}
*/
//日付の妥当性をチェックする
if (!checkDate(year, month, day)) {
if (!check) {
return null;
} else {
Calendar cal = Calendar.getInstance();
cal.set(year, month-1, day);
year = cal.get(Calendar.YEAR);
month = cal.get(Calendar.MONTH) + 1;
day = cal.get(Calendar.DATE);
}
}
//YYYYMMDDの形式に変換する
NumberFormat frm = new DecimalFormat("00");
String ymd = "" + year + frm.format(month) + frm.format(day);
//暦変換テーブルをサーチする
int i = 0;
for (i=0; i= 0 && ymd.compareTo(warekiTable[i][1]) <= 0) {
break;
}
}
//暦テーブルに該当レコードがあれば、和暦年を計算する
if (i < warekiTable.length) {
int jpYear = year - Integer.parseInt(warekiTable[i][0].substring(0,4)) + 1;
//和号+和暦年を返す
return warekiTable[i][2] + jpYear + "/" + month + "/" + day;
} else {
return null;
}
}
和暦から西暦に変換
public static String getAdEra(String gengou, int year, int month, int day, boolean check) {
//和暦変換テーブル
String warekiTable[][] = {
{"18680908","19120729", "M"}, //明治
{"19120730","19261224", "T"}, //大正
{"19261225","19890107", "S"}, //昭和
{"19890108","99991231", "H"}}; //平成
//年が1未満の場合はエラー
if (year < 1) {
return null;
}
//元号で和暦テーブルを検索する
int i;
for (i=0; i= warekiTable.length) {
return null;
}
//西暦年を計算する
int adYear = Integer.parseInt(warekiTable[i][0].substring(0,4)) + year -1;
/*
//1900年未満はエラーとする場合は、コメントをはずす。
if ( adYear < 1900) {
return null;
}
*/
//日付の妥当性をチェックする
if (!checkDate(adYear, month, day)) {
if (!check) {
return null;
} else {
Calendar cal = Calendar.getInstance();
cal.set(adYear, month-1, day);
adYear = cal.get(Calendar.YEAR);
month = cal.get(Calendar.MONTH) + 1;
day = cal.get(Calendar.DATE);
}
}
// YYYY/MM/DDの形式に変換して、返す
NumberFormat frm = new DecimalFormat("00");
return adYear + "/" + frm.format(month) + "/" + frm.format(day);
}
年齢の算出
public static int getAge(int year, int month, int day) {
//今日のカレンダー
Calendar now = Calendar.getInstance();
//誕生日のカレンダー
Calendar birthDay = DateUtil.getCalendar(year, month, day);
//概算年齢 = 現在年 - 誕生年
int age = now.get(Calendar.YEAR) - birthDay.get(Calendar.YEAR);
//今年の誕生月を過ぎていない場合
if (now.get(Calendar.MONTH) < birthDay.get(Calendar.MONTH)) {
//概算年齢から1引く
age--;
//今日が誕生月の場合
} else if (now.get(Calendar.MONTH) == birthDay.get(Calendar.MONTH)){
//誕生日を過ぎていない場合
if (now.get(Calendar.DAY_OF_MONTH) < birthDay.get(Calendar.DAY_OF_MONTH)) {
//概算年齢から1引く
age--;
}
}
//誕生日が今日より大きければエラー
if (age < 0) {
return -1;
} else {
return age;
}
}
干支の取得
public static String getEto(int year) {
//十二支文字列テーブル
String etoTable[] = {"子", "丑", "寅", "卯", "辰", "巳",
"午", "未", "申", "酉", "戌", "亥"};
//西暦4年が「子年」なので、西暦年に8を加算して12の剰余をとる
int i = (year + 8) % 12;
return etoTable[i];
}