Java 日期处理 技巧

Java日期处理还是比较麻烦的。不像ruby on rails 通过对数字的扩展,相当方便。
假设我想知道这个礼拜的周一,月底,月初的具体时间,五天前又是几号?因此专门写了个类封装了下。其实如果组合使用其内部函数,还是很方便的。
需要注意的是这里的函数返回日期都是精确到秒的。
getDayBegine()的结果是:
Mon Jun 08 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()))));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值