`
allwefantasy
  • 浏览: 45806 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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()))));


分享到:
评论
10 楼 jitabc 2010-02-24  
joda-time
9 楼 duyouhua1214 2009-11-13  
写的很详细,不错,学习学习!
8 楼 areha001 2009-10-14  
Calendar 类用起相当地繁琐。

更可气的是 Date类里本来不错的几个方法全被他 过时 了
7 楼 yangtao309 2009-09-01  
6 楼 raomengwen 2009-09-01  
getTimeByMonth(intger mouth) 这个方法的作用我不懂,到底什么意思呢?
5 楼 treblesoftware 2009-06-16  
一遇到有些关于日期的东西就烦。。。。。

各种奇怪的数据格式,能把人烦死。
4 楼 zhiblin 2009-06-16  
支持一下!
3 楼 chaos.wql 2009-06-16  
估计作者是没看过jdk文档的,我就不说什么了.
2 楼 朗拿颠老 2009-06-15  
加点注释就好了 , 收藏之,晚上慢慢看...
1 楼 01404421 2009-06-13  
比较实用可以作为工具类使用,平时都是用的时候再自己写一个,收藏了

相关推荐

    JAVA时间日期处理类实例

    主要介绍了JAVA时间日期处理类,可实现遍历两个日期之间的每一天的功能,涉及针对日期的常见操作技巧,需要的朋友可以参考下

    Java实现的日期处理类完整实例

    主要介绍了Java实现的日期处理类,结合完整实例形式分析了Java针对日期的获取、运算、转换等相关操作技巧,需要的朋友可以参考下

    java源码包---java 源码 大量 实例

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择  Java语言开发的简洁实用的日期选择控件,源码文件功能说明:  [DateChooser.java] Java 日期选择控件(主体类) [public]  ...

    java源码包4

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择  Java语言开发的简洁实用的日期选择控件,源码文件功能说明:  [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    JAVA上百实例源码以及开源项目源代码

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择  Java语言开发的简洁实用的日期选择控件,源码文件功能说明:  [DateChooser.java] Java 日期选择控件(主体类) [public]  ...

    JAVA上百实例源码以及开源项目

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择  Java语言开发的简洁实用的日期选择控件,源码文件功能说明:  [DateChooser.java] Java 日期选择控件(主体类) [public]  ...

    java源码包3

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择  Java语言开发的简洁实用的日期选择控件,源码文件功能说明:  [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    java源码包2

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择  Java语言开发的简洁实用的日期选择控件,源码文件功能说明:  [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    Java基础知识点总结.docx

    <java.lang>.Date:日期类,月份从0—11 92 <java.lang> Calendar:日历类 93 十六、 IO流:用于处理设备上数据 ★★★★★ 94 IO流的概念 95 字符流与字节流 98 流对象 101 File类 102 Java.util.Properties 103 ...

    java jdk实列宝典 光盘源代码

    java的声音处理,介绍java中如何处理声音,包括实现响铃,播放wav,au等音频文件,以及控制声音的大小和音量,Beep.java; 媒体播放器,JMFMediaPlayer.java; 12反射 是java程序开发的特征之一,允许java程序对自身...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    写给大忙人看的Java SE 8

    第5章详细介绍了Java新增的日期/时间API;第6章介绍了原子计数器、并发哈希映射、并行数组操作等特性中的改进;第7章介绍了如何在Java虚拟机上执行JavaScript,以及如何与Java代码进行交互操作;第8章描述了Java 8中...

    写给大忙人看的Java SE 8中文(美)霍斯曼,张若飞

    第5章详细介绍了Java新增的日期/时间API;第6章介绍了原子计数器、并发哈希映射、并行数组操作等特性中的改进;第7章介绍了如何在Java虚拟机上执行JavaScript,以及如何与Java代码进行交互操作;第8章描述了Java 8中...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    出版日期:2010 年3月 开本:16开 其他详细信息查看:http://www.china-pub.com/196571 编辑推荐 Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java ...

    java 实效编程百例 pdf + 源代码

    本书通过100多个精选的实例讲解了利用Java进行应用程序开发的各个方面,涵盖了控件、界面、多媒体控制、图像处理、操作系统、磁盘文件、数据库、网络应用、邮件和通信、Java Beans、国际化和本地化等方面的内容。...

    疯狂JAVA讲义

    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国际化的思路 ...

    JAVA实验02.doc

    1、掌握Java程序流程控制和异常处理机制。 2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。 日期不合法包括:月不合法(大于12、小于1)...

Global site tag (gtag.js) - Google Analytics