Javaの日付操作
package test;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
public class F30Date {
/**
* 2つの日付の月数の差を求めます。
*Date 型の日付 date1-date2 が何ヵ月かを整数で返します。※端数の日数は無視
*
* @param date1 日付1 java.util.Date
* @param date2 日付2 java.util.Date
*
* @return 2つの日付の月数の差
*/
public static int differenceMonths(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
cal1.set(Calendar.DATE, 1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
cal2.set(Calendar.DATE, 1);
int count = 0;
if (cal1.before(cal2)) {
while (cal1.before(cal2)) {
cal1.add(Calendar.MONTH, 1);
count--;
}
} else {
count--;
while (!cal1.before(cal2)) {
cal1.add(Calendar.MONTH, -1);
count++;
}
}
return count;
}
/**
* 2つの日付の月数の差を求めます。
*日付文字列 strDate1-strDate2 が何ヵ月かを整数で返します。※端数の日数は無視
*
* @param strDate1 日付文字列1 【YYYY/MM/DD】OR【YYYY/MM/DD hh:mm:ss】
* @param strDate2 日付文字列2 【YYYY/MM/DD】OR【YYYY/MM/DD hh:mm:ss】
*
* @return 2つの日付の月数の差
*
* @throws ParseException 日付フォーマットが不正な場合
*/
public static int differenceMonths(String strDate1, String strDate2)
throws ParseException {
Date date1 = DateFormat.getDateInstance().parse(strDate1);
Date date2 = DateFormat.getDateInstance().parse(strDate2);
return differenceMonths(date1, date2);
}
/**
* 2つの日付の月数の差を求めます。
*Calendar 型の日付 cal1-cal2 が何ヵ月かを整数で返します。※端数の日数は無視
*
* @param date1 日付1 java.util.Calendar
* @param date2 日付2 java.util.Calendar
*
* @return 2つの日付の月数の差
*/
public static long differenceMonths(Calendar cal1, Calendar cal2) {
Date t1 = cal1.getTime();
Date t2 = cal2.getTime();
return differenceMonths(t1, t2);
}
/**
* 2つの日付の日数の差を求めます。Date 型の日付 date1-date2 が何日かを整数で返します。
*
* @param date1 日付1 java.util.Date
* @param date2 日付2 java.util.Date
*
* @return 2つの日付の日数の差
*/
public static long differenceDays(Date t1, Date t2) {
// 日付の差を求める
long diff = t1.getTime() - t2.getTime();
// 日付の差はミリ秒になっているので、日数に計算して表示する
return (diff / 1000 / 60 / 60 / 24);
}
/**
* 2つの日付の日数の差を求めます。日付文字列 strDate1-strDate2 が何日かを整数で返します。
*
* @param strDate1 日付文字列1 【YYYY/MM/DD】OR【YYYY/MM/DD hh:mm:ss】
* @param strDate2 日付文字列2 【YYYY/MM/DD】OR【YYYY/MM/DD hh:mm:ss】
*
* @return 2つの日付の日数の差
*
* @throws ParseException 日付フォーマットが不正な場合
*/
public static long differenceDays(String strDate1, String strDate2)
throws ParseException {
Date date1 = DateFormat.getDateInstance().parse(strDate1);
Date date2 = DateFormat.getDateInstance().parse(strDate2);
return differenceDays(date1, date2);
}
/**
* 2つの日付の日数の差を求めます。Date 型の日付 date1-date2 が何日かを整数で返します。
*
* @param cal1 日付1 java.util.Calendar
* @param cal2 日付2 java.util.Calendar
*
* @return 2つの日付の日数の差
*/
public static long differenceDays(Calendar cal1, Calendar cal2) {
Date t1 = cal1.getTime();
Date t2 = cal2.getTime();
return differenceDays(t1, t2);
}
/**
* 日付の妥当性チェック。
*
* @param year 年
* @param month 月
* @param day 日
*
* @return 引数は正しい日付の場合true、なければfalse
*/
public static boolean isDate(int year, int month, int day) {
boolean flg = true;
Calendar cal1 = Calendar.getInstance();
// 日付・時刻解析を厳密に行うかどうかを設定する
cal1.setLenient(false);
cal1.set(year, month - 1, day);
try {
cal1.getTime();
} catch (IllegalArgumentException e) {
flg = false;
}
return flg;
}
/**
* 日付の妥当性チェック(hh:mm:ssのチェックを含まず)
*
* @param dateStr 日付
*
* @return 引数は正しい日付の場合true、なければfalse
*/
public static boolean isDate(String dateStr) {
boolean flg = true;
DateFormat format = DateFormat.getDateInstance();
// 日付・時刻解析を厳密に行うかどうかを設定する
format.setLenient(false);
try {
format.parse(dateStr);
} catch (Exception e) {
flg = false;
}
return flg;
}
/**
* 現在の日付・時刻から指定の時間量を加算・減算した結果を返します。
* 年、月、日、時間、分、秒、ミリ秒の各時間フィールドに対し、任意の時間量を設定できます。
* たとえば、現在の日付時刻から 10 日前を計算する場合は以下となります。
* Calendar cal = add(null,0,0,-10,0,0,0,0);
*
* 各時間フィールドの値がその範囲を超えた場合、次の大きい時間フィールドが増分または減分されます。
* たとえば、以下では1時間と5分進めることになります。
* Calendar cal = add(null,0,0,0,0,65,0,0);
*
* @param cal 日付時刻の指定があればセットする。NULLの場合現在の日付で新しいCalendarを生成する。
* @param addYera 加算・減算する年数
* @param addMonth 加算・減算する月数
* @param addDate 加算・減算する日数
* @param addHour 加算・減算する時間
* @param addMinute 加算・減算する分
* @param addSecond 加算・減算する秒
* @param addMillisecond 加算・減算するミリ秒
*
* @return 計算後の Calendar インスタンス。
*/
public static Calendar add(Calendar cal,
int addYera,int addMonth,int addDate,
int addHour,int addMinute,int addSecond,
int addMillisecond){
if (cal == null) {
cal = Calendar.getInstance();
}
cal.add(Calendar.YEAR, addYera);
cal.add(Calendar.MONTH, addMonth);
cal.add(Calendar.DATE, addDate);
cal.add(Calendar.HOUR_OF_DAY, addHour);
cal.add(Calendar.MINUTE, addMinute);
cal.add(Calendar.SECOND, addSecond);
cal.add(Calendar.MILLISECOND, addMillisecond);
return cal;
}
public static void main(String[] args) {
// インスタンス取得
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
// 時間フィールドクリア
c1.clear();
c2.clear();
// 比較する日付をセット
c2.set(2010, Calendar.MAY, 1);
c1.set(2010, Calendar.NOVEMBER, 30);
System.out.println(isDate("2010/1/3"));
}
public static String getDateString(Calendar cal1) {
int year = cal1.get(Calendar.YEAR); // (2)現在の年を取得
int month = cal1.get(Calendar.MONTH) + 1; // (3)現在の月を取得
int day = cal1.get(Calendar.DATE); // (4)現在の日を取得
int hour = cal1.get(Calendar.HOUR_OF_DAY); // (5)現在の時を取得
int minute = cal1.get(Calendar.MINUTE); // (6)現在の分を取得
int second = cal1.get(Calendar.SECOND); // (7)現在の秒を取得
String dateStr = year+"/"+month+"/"+day+" "+hour+":"+minute+":"+second;
return dateStr;
}
}
没有评论:
发表评论