Java日付処理テクニック
Javaの日付処理はやはり面倒です.ruby on railsのように数字の拡張を通じて、かなり便利ではありません.
今週の月曜日、月末、月初めの具体的な時間を知りたいとしたら、5日前は何日ですか.そのため、クラスをパッケージ化しました.内部関数を組み合わせると便利です.
ここの関数の戻り日は秒まで正確であることに注意してください.
getDayBegine()の結果は次のとおりです.
Mon Jun 08 00:00:00:00 CST 2009形式の
getDayEnd()の結果は次のとおりです.
Sun Jun 07 23:59:59 CST 2009形式
くだらないことは言わないで、コードを見て(詳細は簡単です)
次の例を見てみましょう
もし私が先週の初日を手に入れたら、どうやって取りますか?
前の週末にペンを手に入れたら?
今週の月曜日、月末、月初めの具体的な時間を知りたいとしたら、5日前は何日ですか.そのため、クラスをパッケージ化しました.内部関数を組み合わせると便利です.
ここの関数の戻り日は秒まで正確であることに注意してください.
getDayBegine()の結果は次のとおりです.
Mon Jun 08 00:00:00:00 CST 2009形式の
getDayEnd()の結果は次のとおりです.
Sun Jun 07 23:59:59 CST 2009形式
くだらないことは言わないで、コードを見て(詳細は簡単です)
package com.snail.gequ.action;
import java.util.Calendar;
import java.util.Date;
import org.apache.log4j.Logger;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Projections;
import com.snail.commons.basedao.IBaseDAO;
import com.snail.component.beans.Gequ;
import com.snail.component.beans.Gequzhuanji;
import com.snail.component.beans.Huiyuan;
import com.snail.component.beans.Renqirecord;
public class RenQiRecordUtil {
private static final long serialVersionUID = 3193922028309094171L;
private final static Logger logger = Logger
.getLogger(RenQiRecordUtil.class);
protected Integer getMonthOfThisYear() {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
return cal.get(Calendar.MONTH) + 1;
}
protected Date getTimeByMonth(Integer month) {
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.set(Calendar.MONTH, month - 1);
return cal.getTime();
}
protected Date getMonthBegin(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), 1, 0, 0, 0);
return cal.getTime();
}
protected Date getMonthEnd(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal
.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, 1, 0,
0, 0);
cal.set(Calendar.SECOND, cal.get(Calendar.SECOND) - 1);
return cal.getTime();
}
protected Date getWeekBegin(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
Date mm=nDaysAgo(cal.get(Calendar.DAY_OF_WEEK)-2,date);
return getDayBegin(mm);
}
protected Date getWeekEnd(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
Date mm=nDaysAfter(cal.get(8-Calendar.DAY_OF_WEEK),date);
return getDayEnd(mm);
}
protected Date nDaysAfter(int n,Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH)+n);
return cal.getTime();
}
protected Date getDayBegin(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
return cal.getTime();
}
protected Date getDayEnd(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal
.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),cal.get(Calendar.DAY_OF_MONTH)+1, 0,
0, 0);
cal.set(Calendar.SECOND, cal.get(Calendar.SECOND) - 1);
return cal.getTime();
}
protected Date nMonthsAgo(Integer n,Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) - n);
return cal.getTime();
}
protected Date nDaysAgo(Integer n,Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH) -n);
return cal.getTime();
}
public RenQiRecordUtil() {
// TODO Auto-generated constructor stub
}
}
次の例を見てみましょう
もし私が先週の初日を手に入れたら、どうやって取りますか?
RenQiRecordUtil util=new RenQiRecordUtil();
System.out.println(util.nDaysAgo(7,util.getWeekBegin(new Date())));
前の週末にペンを手に入れたら?
System.out.println(util.getDayEnd(util.nDaysAgo(1,util.getWeekBegin(new Date()))));