Java日付アクション関数

4306 ワード

1.ある月の最大日数を計算する
Calendar time = Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year);
time.set(Calendar.MONTH,i-1);//  ,Calendar       0         
intday = time.getActualMaximum(Calendar.DAY_OF_MONTH);//      

 
注意:setメソッドを使用する前に、まずclearをクリックする必要があります.そうしないと、多くの情報がシステムの現在の時間2.CalendarとDateからの変換を継承します(1)CalendarがDateに変換されます.
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();

 (2)DateをCalendarに変換
Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);

 3.出力日時のフォーマット
Date date = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-ddhh:mm:ss");
System.out.println(df.format(date));

 4.1年の曜日を計算(1)ある日が1年の曜日であることを計算
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
int weekno = cal.get(Calendar.WEEK_OF_YEAR);

 (2)計算一年の何週目が何日目か
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.WEEK_OF_YEAR, 1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(df.format(cal.getTime()));

 
出力:2006-01-02
 
5.add()とroll()の使い方(1)add()の方法
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.add(Calendar.DATE, -4);
Date date = cal.getTime();
System.out.println(df.format(date));
cal.add(Calendar.DATE, 4);
date = cal.getTime();
System.out.println(df.format(date));

 出力:   2006-08-30   2006-09-03(2)rollメソッド
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.roll(Calendar.DATE, -4);
date = cal.getTime();
System.out.println(df.format(date));
cal.roll(Calendar.DATE, 4);
date = cal.getTime();
System.out.println(df.format(date));

 出力:   2006-09-29   2006-09-03に分かるように、roll()方法は今月中に循環し、一般的にadd()方法を使用する.
 
6.2つの任意の時間の間の間隔日数(1)を計算してCalendarオブジェクトに伝達する
/**            
* @param startday      
* @param endday     
* @return
*/
public int getIntervalDays(Calendar startday,Calendar endday){
	//  startday endday  
	if(startday.after(endday)){
		Calendar cal=startday;
		startday=endday;
		endday=cal;
	}

	//            
	long sl=startday.getTimeInMillis();
	long el=endday.getTimeInMillis();

	long ei=el-sl;    

	//           
	return (int)(ei/(1000*60*60*24));
}

 
(2)Dateオブジェクトへ転送
/**            
* @param startday      
* @param endday     
* @return
*/
public int getIntervalDays(Date startday,Date endday){
	//  startday endday  
	if(startday.after(endday)){
		Date cal = startday;
		startday = endday;
		endday = cal;
	}

	//            
	long sl = startday.getTime();
	long el = endday.getTime();

	long ei=el-sl;    

	//           
	return (int)(ei/(1000*60*60*24));
}

 
同じように、同じ方法で任意の2つの時間間隔の時間数、分数、秒数などを計算できます.注:以上の方法は完全に時間で計算されており、startday=「2006-10-11 20:00」endday=「2006-10-12 8:00:00」の計算結果が0になる場合がありますが、計算結果を1にすることはできません.この場合、以下のような方法で実現することができる.
endday.set(Calendar.HOUR_OF_DAY, 23);
endday.set(Calendar.MINUTE, 59);
endday.set(Calendar.SECOND, 59);
endday.set(Calendar.MILLISECOND, 59);

 
このようにstartday,enddayに伝えると,結果は私たちの望み通りになった.ただし、上記の方法が面倒な場合は、以下の方法を参考にしてください.
(3)間隔日数の正確な計算方法の改善
public int getDaysBetween (Calendar d1, Calendar d2){
	if (d1.after(d2)){  // swap dates so that d1 is start and d2 is end
		java.util.Calendar swap = d1;
		d1 = d2;
		d2 = swap;
	}

	int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
	int y2 = d2.get(Calendar.YEAR);

	if (d1.get(Calendar.YEAR) != y2){
		d1 = (Calendar) d1.clone();
		do{
			days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//         
			d1.add(Calendar.YEAR, 1);
		} while (d1.get(Calendar.YEAR) != y2);
	}
	return days;
}