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()))));
分享到:
相关推荐
主要介绍了JAVA时间日期处理类,可实现遍历两个日期之间的每一天的功能,涉及针对日期的常见操作技巧,需要的朋友可以参考下
主要介绍了Java实现的日期处理类,结合完整实例形式分析了Java针对日期的获取、运算、转换等相关操作技巧,需要的朋友可以参考下
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
<java.lang>.Date:日期类,月份从0—11 92 <java.lang> Calendar:日历类 93 十六、 IO流:用于处理设备上数据 ★★★★★ 94 IO流的概念 95 字符流与字节流 98 流对象 101 File类 102 Java.util.Properties 103 ...
java的声音处理,介绍java中如何处理声音,包括实现响铃,播放wav,au等音频文件,以及控制声音的大小和音量,Beep.java; 媒体播放器,JMFMediaPlayer.java; 12反射 是java程序开发的特征之一,允许java程序对自身...
Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...
第5章详细介绍了Java新增的日期/时间API;第6章介绍了原子计数器、并发哈希映射、并行数组操作等特性中的改进;第7章介绍了如何在Java虚拟机上执行JavaScript,以及如何与Java代码进行交互操作;第8章描述了Java 8中...
第5章详细介绍了Java新增的日期/时间API;第6章介绍了原子计数器、并发哈希映射、并行数组操作等特性中的改进;第7章介绍了如何在Java虚拟机上执行JavaScript,以及如何与Java代码进行交互操作;第8章描述了Java 8中...
出版日期:2010 年3月 开本:16开 其他详细信息查看:http://www.china-pub.com/196571 编辑推荐 Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java ...
本书通过100多个精选的实例讲解了利用Java进行应用程序开发的各个方面,涵盖了控件、界面、多媒体控制、图像处理、操作系统、磁盘文件、数据库、网络应用、邮件和通信、Java Beans、国际化和本地化等方面的内容。...
9.4 处理日期的类 333 9.4.1 Date类 333 9.4.2 Calendar类 334 9.4.3 TimeZone类 337 9.5 正则表达式 338 9.5.1 创建正则表达式 338 9.5.2 使用正则表达式 341 9.6 程序国际化 345 9.6.1 Java国际化的思路 ...
1、掌握Java程序流程控制和异常处理机制。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 日期不合法包括:月不合法(大于12、小于1)...