`
allwefantasy
  • 浏览: 47007 次
  • 性别: 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中实现这两种转换。 #### 一...

    常用代码:java日期处理

    在Java编程语言中,日期处理是一项常见的任务,用于管理、操作和格式化日期和时间。这篇博客"常用代码:java日期处理"很可能包含...通过阅读和理解这个文件的源码,我们可以学习到更多实际应用中的日期处理技巧和方法。

    Java常用日期辅助类

    在Java编程中,日期处理是常见的任务之一。Java提供了多种日期辅助类来帮助开发者进行日期时间的操作和格式化。...通过阅读`DateHelper.java`的源码,我们可以学习到更多关于日期处理的技巧和最佳实践。

    java日期转化操作大全

    本篇文章将深入探讨Java中日期转换的各种方法和技巧。 一、日期对象的创建 在Java中,日期对象可以通过`java.util.Date`类或`java.time`包中的类来创建。`Date`类是较早的API,而`java.time`包(自Java 8引入)...

    java编程技巧典型案例解析

    Java编程技巧典型案例解析 在Java编程领域,掌握高效、实用的编程技巧对于提升代码质量、优化性能以及...同时,持续关注Java新特性,如Java 8及后续版本引入的模块系统、时间日期API等,也是提升编程能力的重要途径。

    Java 获取日期时间代码

    本文将详细介绍几种常用的Java日期时间获取方法,包括如何获取完整日期时间、仅获取时间部分(时分秒)、获取日期部分以及如何获取时间戳。此外,我们还将探讨如何使用自定义格式来获取日期时间。 #### 二、基本...

    java Swing日期控件

    Java Swing 是 Java GUI(图形用户界面)库的一部分,它提供了丰富的组件来构建桌面应用程序。...同时,理解并应用文档中的提示和技巧将帮助你更有效地利用这个日期控件,提升你的Java Swing 应用程序的用户体验。

    JAVA日期格式大全

    `JAVA日期格式大全`这个主题涵盖了许多关于在Java中如何格式化、解析和操作日期的技巧和方法。这篇博客文章,虽然链接未提供具体内容,但我们可以根据常规知识和Java API来探讨日期和时间处理的关键知识点。 1. **...

    Java日期格式化及其使用例子收集

    ### Java日期格式化详解及其应用实例 #### 一、引言 在Java开发过程中,日期时间的处理是一项非常常见的需求。对于日期时间的格式化、解析等操作,`SimpleDateFormat` 类提供了强大的支持。本文将详细介绍`...

    Java日期类案例及源代码.rar

    Java日期类是Java编程语言中...通过这些案例和源代码,学习者可以更好地理解Java日期类的使用场景,掌握日期时间的处理技巧,提升编程能力。同时,这些案例也适合作为练习,帮助学生巩固课堂所学,提高问题解决能力。

    Java代码常用技巧

    ### Java代码常用技巧:Oracle数据库表操作返回值处理方法 #### 概述 在实际的软件开发工作中,处理数据库查询结果是一项常见的任务。本篇主要介绍如何利用Java语言结合Oracle数据库进行表操作,并通过示例代码...

    日期计算器java日期计算器java.doc

    《日期计算器Java实现详解》 日期计算器是一种实用的工具,用于计算两个日期之间的差值,通常以天数表示。在Java编程中,我们...通过这个项目,开发者可以更深入地理解Java事件模型、UI设计以及日期处理的API使用。

    java对文本的各种处理

    Java的`java.text`包支持国际化和本地化,如`MessageFormat`和`NumberFormat`可以格式化日期、时间、货币等。 9. **文本处理库** 除了内置的工具,还有一些强大的第三方库,如Apache Commons Lang、Guava等,提供...

    java 技巧 与 实例

    在学习Java时,掌握一些实用技巧和常见实例能显著提高编程效率。以下是一些关键知识点的详细解释: 1. **字符串处理**: - `String.trim()`:这个方法用于去除字符串两端的空白字符。例如,`String b = " hello ...

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

    Java实现的日期处理类是Java编程语言中对日期的处理和操作的集合,包括日期的获取、运算、转换等相关操作技巧。本文将详细介绍Java实现的日期处理类,结合完整实例形式分析了Java针对日期的获取、运算、转换等相关...

    Date4j,一个简约的日期处理类库

    Date4j是一个轻量级的日期处理类库,它的出现为Java开发者提供了一种更为简单易用的方式来...通过阅读源代码和实际使用,开发者可以更深入地掌握日期处理的技巧,提高代码质量,并且能更好地适应全球化的时间处理需求。

    Java8时间和日期API20例Java开发Java经验技

    在之前的版本中,Java 的日期处理功能相对复杂,常常导致代码难以理解和维护。Java 8 引入了全新的 `java.time` 包,提供了更加直观和强大的工具,使得开发者能够更轻松地处理日期、时间问题。 以下是一些关键知识...

    暑期培训学习笔记之 java\日期排序

    掌握Java中的日期排序技巧是每个开发者必备的技能之一。理解如何创建、格式化、比较和排序日期,以及如何应对各种场景,将有助于编写高效且易维护的代码。不断实践和学习新的时间日期API,能让你在处理日期相关问题...

    JAVA时间日期处理类实例

    在实际开发中,理解并掌握这些日期处理的技巧和API是非常重要的,因为日期和时间的处理是许多业务场景的基础,比如日志记录、报表生成、事件调度等。通过合理地使用Java提供的日期处理工具,可以提高代码的效率和...

Global site tag (gtag.js) - Google Analytics