`
wangyijiangshui
  • 浏览: 82673 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类

Java日期常用操作方法工具类

阅读更多

 

package zhizhu.util;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * Java日期常用操作方法工具类
 * 
 * @author 蜘蛛
 * @date	2011-07-31
 */
public class JavaDateUtil {

	/**
	 * 判断当前时期是否为当月的月末
	 * 
	 * @param c
	 * 
	 * @return	如果给定日期为当月最后一天该方法返回true,否则返回false
	 */
	public static boolean isTodayMonthEnd(Calendar c) {
		boolean result = false;
		if(null != c && c.getActualMaximum(Calendar.DAY_OF_MONTH) == c.get(Calendar.DAY_OF_MONTH)){
			result = true;
		}
		return result;
	}
	
	/**
	 * 判断当前时期是否为当月的月初
	 * 
	 * @param c
	 * 
	 * @return	如果为每月1号,则返回true,否则返回false
	 */
	public static boolean isTodayMonthStart(Calendar c) {
		boolean result = false;
		if(null == c) c = Calendar.getInstance();
		if(1 == c.get(Calendar.DAY_OF_MONTH)){
			result = true;
		}
		return result;
	}
	
	/**
	 * 判断当前时期是否为周末
	 * 
	 * @param c
	 * 
	 * @return	给定日期为周末则返回true,否则返回false
	 */
	public static boolean isTodayWeekEnd(Calendar c) {
		boolean result = false;
		//注意在java中,周末为一周的第一天
		if(null != c && 1 == c.get(Calendar.DAY_OF_WEEK)){
			result = true;
		}
		return result;
	}
	
	/**
	 * 获取指定时间所在星期的第一天,即周一
	 * 
	 * @param calendar
	 * 
	 * @return
	 */
	public static Calendar theFirstDayOfWeek(Calendar calendar) {
		Calendar monday = null;
		if (null != calendar) {
			monday = calendar;
			//周日才是一个星期的第一天,所以周一为2,应该减去一天
			int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK)-1;
			//周日为星期一,上面减去了1,所以当等于0时,应该是周日7
			if(0 == dayOfWeek)dayOfWeek = 7;
			monday.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - (dayOfWeek-1));
		}
		return monday;
	}
	
	/**
	 * 获取指定时间所在星期的最后一天,即周日
	 * 
	 * @param calendar
	 * 
	 * @return
	 */
	public static Calendar theLastDayOfWeek(Calendar calendar) {
		Calendar sunday = null;
		if (null != calendar) {
			sunday = calendar;
			//周日才是一个星期的第一天,所以周一为2,应该减去一天
			int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK)-1;
			//周日为星期一,上面减去了1,所以当等于0时,应该是周日7
			if(0 == dayOfWeek)dayOfWeek = 7;
			sunday.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + (7 - dayOfWeek));
		}
		return sunday;
	}
	
	/**
	 * 获取指定时间所在月份的第一天,即月初
	 * 
	 * @param calendar
	 * 
	 * @return
	 */
	public static Calendar theFirstDayOfMonth(Calendar calendar) {
		Calendar monthFirstDay = null;
		if (null != calendar) {
			monthFirstDay = calendar;
			int dayOfMonth =  calendar.get(Calendar.DAY_OF_MONTH);
			monthFirstDay.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - (dayOfMonth-1));
		}
		 return monthFirstDay;
	}
	
	/**
	 * 获取指定时间所在月份的最后一天,即月末
	 * 
	 * @param calendar
	 * 
	 * @return
	 */
	public static Calendar theLastDayOfMonth(Calendar calendar) {
		Calendar monthLastDay = null;
		if (null != calendar) {
			monthLastDay = calendar;
			int dayOfMonth =  calendar.get(Calendar.DAY_OF_MONTH);
			int maxDayOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
			monthLastDay.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + (maxDayOfMonth-dayOfMonth));
		}
		 return monthLastDay;
	}
	
	/**
	 * 在指定时间上加上或减去指定天
	 * 
	 * @param calendar
	 * @param day	将要加上或减去的天数(负值代表减去)
	 * 
	 * @return
	 */
	public static Calendar AddOrMinusNDay(Calendar calendar, int day) {
		Calendar result = null;
		if (null != calendar) {
			result = calendar;
			result.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR)+day);
		}
		return result;
	}
	
	/**
	 * 在指定时间上加上或减去指定月(由于月份有大,有小,2月存在平年和闰年之别,所有下面这种方法不是
	 * 很准确,可以参照下面的方法beforeNMonth)
	 * 
	 * @param calendar
	 * @param month	将要加上或减去的月数(负值代表减去)
	 * 
	 * @return
	 */
	public static Calendar AddOrMinusNMonth(Calendar calendar, int month) {
		Calendar result = null;
		if (null != calendar) {
			result = calendar;
			result.set(Calendar.MONTH,  calendar.get(Calendar.MONTH)+month);
		}
		return result;
	}
	
	/**
	 * 在指定时间上加上或减去指定年
	 * 
	 * @param calendar
	 * @param month	将要加上或减去的年数(负值代表减去)
	 * 
	 * @return
	 */
	public static Calendar AddOrMinusNYear(Calendar calendar, int year) {
		Calendar result = null;
		if (null != calendar) {
			result = calendar;
			result.set(Calendar.YEAR,  calendar.get(Calendar.YEAR)+year);
		}
		return result;
	}
	
	/**
	 * 得到指定日期前n个月的日期,如果起始日期的日部分在回退后的月份中不存在的继续回退到当月的最大值(比如现在是5月31日,回退3个月则到2月,
	 * 而2月只有28或29天,这是就取该月的天中的最大值)
	 * 
	 * @param c	开始推算的起始日期(不指定则为当前时间)
	 * @param month	回退月数
	 * @return	
	 */
	public static Calendar beforeNMonth(Calendar c, int n){
		int month = 0;
		int year = 0;
		int day = 0;
		int maxDay = 0;
		
		Calendar calendar = null;
		if(c != null){
			calendar = c;
		}else{
			calendar = Calendar.getInstance();
		}
		//到当前指定日期为止的总月数
		month = calendar.get(Calendar.YEAR)*12+calendar.get(Calendar.MONTH)+1-n;
		//计算出年份
		year = month/12;
		//计算出月份(由于月份是从0开始的,即1月份,在Calendar中为0月份,所以要减1)
		month = month%12-1;
		//计算月份中的日
		day = calendar.get(Calendar.DAY_OF_MONTH);
		calendar.set(year, month, 1);
		//获取指定年月中的最大天数
		maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
		if (day > maxDay){
			day = maxDay;
		}
		calendar.set(Calendar.DAY_OF_MONTH, day);
		return calendar;
	}
	
	/**
	 * 按指定格式格式化指定日期(默认为yyyy-MM-dd HH:mm:ss)<br/>
	 * <i>格式化java.util.Date,java.sql.Timestamp,如果要格式化Calendar,可以通过calendar.getTime()将</i><br/>
	 * <i>Calendar对象转换成java.util.Date再进行格式化,不过也可以采用下面专门针对Calendar类的格式化方法格式化)</i>
	 * 
	 * @param date
	 * @param formatStr
	 * 
	 * @return
	 */
	public static String formatDate(Date date, String formatStr) {
		SimpleDateFormat sdf = null;
		String result = null;
		if(null == formatStr || "".equals(formatStr))formatStr = "yyyy-MM-dd HH:mm:ss";
		if (null != date) {
			sdf = new SimpleDateFormat(formatStr);
			result = sdf.format(date);
			sdf = null;
		}
		return result;
	}
	
	/**
	 * 按指定格式格式化指定日期(默认为yyyy-MM-dd HH:mm:ss)
	 * 
	 * @param date
	 * @param formatStr
	 * 
	 * @return
	 */
	public static String formatDate(Calendar calendar, String formatStr) {
		SimpleDateFormat sdf = null;
		String result = null;
		if(null == formatStr || "".equals(formatStr))formatStr = "yyyy-MM-dd HH:mm:ss";
		if (null != calendar) {
			sdf = new SimpleDateFormat(formatStr);
			result = sdf.format(calendar.getTime());
			sdf = null;
		}
		return result;
	}
	
	/**
	 * 得到指定或者当前时间前offset毫秒的Calendar
	 * @param c
	 * @param offset
	 * @return
	 */
	public static Calendar before(Calendar c, long offset){
		Calendar calendar = null;
		if(c != null){
			calendar = c;
		}else{
			calendar = Calendar.getInstance();
		}
		
		calendar.setTimeInMillis(calendar.getTimeInMillis() - offset);
		return calendar;
	}
	
	/**
	 * 得到指定或者当前时间前offset毫秒的Calendar
	 * @param c
	 * @param offset
	 * @return
	 */
	public static Calendar after(Calendar c, long offset){
		Calendar calendar = null;
		if(c != null){
			calendar = c;
		}else{
			calendar = Calendar.getInstance();
		}
		
		calendar.setTimeInMillis(calendar.getTimeInMillis() - offset);
		return calendar;
	}
	
	/**
	 * Date类型转换到Calendar类型
	 * @param d
	 * @return
	 */
	public static Calendar Date2Calendar(Date d){
		Calendar c = Calendar.getInstance();
		c.setTime(d);
		return c;
	}
	
	/**
	 * Calendar类型转换到Date类型
	 * @param c
	 * @return
	 */
	public static Date Calendar2Date(Calendar c){
		return c.getTime();
	}
	
	/**
	 * Date类型转换到Timestamp类型
	 * @param d
	 * @return
	 */
	public static Timestamp Date2Timestamp(Date d){
		return new Timestamp(d.getTime());
	}
	
	/**
	 * Calendar类型转换到Timestamp类型
	 * @param c
	 * @return
	 */
	public static Timestamp Calendar2Timestamp(Calendar c){
		return new Timestamp(c.getTimeInMillis());
	}
	
	/**
	 * Timestamp类型转换到Calendar类型
	 * @param ts
	 * @return
	 */
	public static Calendar Timestamp2Calendar(Timestamp ts){
		Calendar c = Calendar.getInstance();
		c.setTime(ts);
		return c;
	}
}
2011-07-31于合肥

 

分享到:
评论

相关推荐

    java日期格式化工具类

    java日期格式化工具类,一些常用的日期操作方法

    java基础类库开发包,工作5年精心整理_Java常用工具类源码

    提供了很丰富的java工具类,包括字符串、数字、日期、文件、图像、编码解码、校验工具、文档操作等。 主要分为以下几种: - 1.通用操作类,例如String、数字、日期、各种校验等 - 2.文档操作,excel、pdf等 - 3.加密...

    java常用工具类的使用

    在Java开发类库中,提供了很多工具类,我们即将学习最常见的工具类,比如对日期的操作,对集合的操作等。具体更多的工具类,请参考JavaDoc文档。 2. java.util.Date类 Date类包装了毫秒值,毫秒值表示自1970年1月1...

    java基础工具类iceroot

    java基础工具类iceroot iceroot是一个java基础工具类.封装了很多有用的方法. 该类库无任何第三方依赖. 涵盖了 字符串操作 时间转化 读取配置文件 等方面. 基础工具类对于java代码的编写是非常必要的,然 而很多...

    自己收集整理的一些常用的工具类

    DateUtil 日期操作工具类 DbHelper 数据库帮助类 DensityUtil 屏幕信息获取数值的转换 DeviceStatusUtils 手机状态工具类 主要包括网络、蓝牙、屏幕亮度、飞行模式、音量等 DigestUtils DigestUtils FileUtils 文件...

    日期格式化工具类

    日期操作是日常开发当中最常见的操作之一,故开放下自己封装的常用工具操作方法。 在java中队日期类型的处理并不方便,通常都需要借助java.text.SimpleDateFormat类来实现日期类型 和字符串类型之间的转换,但是在...

    JAVA_API1.6文档(中文)

    java.util.concurrent 在并发编程中很常用的实用工具类。 java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类...

    Java开发技术大全(500个源代码).

    invokeMethod.java 同一个类中调用方法示例 invokeOther.java 类的外部调用方法示例 invokeStaticMethod.java 调用静态方法示例 localVariable.java 演示局部变量 localVSmember.java 局部变量与成员变量同名...

    懒惰:Android工具自己整理的常用的工具类

    日期操作工具类 数据库帮助类 屏幕信息获取数值的转换 手机状态工具类主要包括网络,蓝牙,屏幕亮度,飞行模式,音量等 DigestUtils 文件操作 拼音汉字处理 欠税额 MD5 设备信息的获取 网络状态 手机组件调用工具...

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

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

    Android集成主流优秀第三方组件框架

    日期操作工具类(ToolDateTime.java),获取日期、日期加减、格式化日期、日期转换等操作 XML操作工具类(ToolXml.java),基于DOM/XMLPullPaser模式解析、生成XML操作 XMPP操作工具类(ToolXMPP.java),基于XMPP协议...

    java api最新7.0

    java.util.concurrent 在并发编程中很常用的实用工具类。 java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,...

    Java 1.6 API 中文 New

    java.util.concurrent 在并发编程中很常用的实用工具类。 java.util.concurrent.atomic 类的小工具包,支持在单个变量上解除锁的线程安全编程。 java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,...

    Java开发详解.zip

    030902_【第9章:多线程】_线程常用操作方法笔记.pdf 030903_〖第9章:多线程〗_线程操作范例笔记.pdf 030904_【第9章:多线程】_同步与死锁笔记.pdf 030905_【第9章:多线程】_线程操作案例——生产者和消费者笔记....

    基础深化和提高-常用类

    Java常用类指的是Java标准库中提供的一些常用的类,这些类提供了丰富的功能和工具,可以帮助开发者更高效地编写Java程序。Java常用类包括但不限于以下几个方面的内容: 集合类: ArrayList、LinkedList、HashMap、...

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

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

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

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

    java源码包4

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

    java源码包3

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

Global site tag (gtag.js) - Google Analytics