`
wangyijiangshui
  • 浏览: 85506 次
  • 性别: 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常用的工具类"的详细说明。 首先,工具类通常包含静态方法,这些方法不依赖于类的实例,可以直接调用,减少了对象创建的开销。这些类通常以“Utils”或“Helper”结尾,如Apache Commons Lang中的...

    java常用的工具类整理28个

    在Java编程语言中,工具类(Utility Class)是包含各种静态方法的类,这些方法用于执行特定任务,如数据操作、文件处理、数学计算等。它们通常不包含实例变量,只提供静态方法服务,帮助开发者提高代码的复用性和...

    常用的java工具类

    本篇文章将详细解析Java中常用的工具类,包括字符处理、文件处理、时间操作以及图片处理等方面的知识点。 1. **字符处理**: - `java.lang.String`:String类是Java中最基础也是最常用的数据类型之一,提供了大量...

    Java常用工具类

    Java常用工具类是Java开发中不可或缺的一部分,它们提供了一系列便捷的方法,帮助开发者高效地处理各种常见任务。在Java中,最著名的工具类库是`java.util`包,它包含了大量实用类,如集合、日期时间、数学计算、...

    java常用工具类

    6. **字符串处理**:`String`类是Java中最常用的类之一,包含了很多方便的字符串操作方法,如substring、indexOf、replace、trim等。`StringBuilder`和`StringBuffer`则提供了在字符串拼接时的线程安全性能。 7. **...

    java开发常用工具类

    本文将详细解析"java开发常用工具类"中的关键知识点,包括日历、时间处理、Excel导出、网络请求、流操作、数据处理、数值计算以及XML和Web工具类。 1. **日历和时间处理**: Java中`java.util.Calendar`和`java....

    java开发常用工具类大全,程序员必备工具

    本文将详细解析“java开发常用工具类大全”中涉及的关键知识点,包括但不限于输入字符校验、数据转换、网络操作、加密解密、JSON处理、图像操作以及数据库操作。 1. **输入字符校验类**: 这类工具通常包含对字符...

    java工具类集合

    Java工具类集合是Java开发中不可或缺的一部分,它们提供了一系列便捷的方法,帮助开发者高效地处理各种常见任务。在Java中,工具类通常被组织在各种包下,如`java.util`、`java.lang`、`java.io`等。下面将详细介绍...

    java 常用工具类

    Java工具类是Java编程中非常重要的组成部分,它们提供了一系列预定义的方法,可以帮助开发者高效地处理各种常见任务,而无需从头实现。在Java中,最知名的工具类库是`java.util`包,它包含了大量方便实用的类。下面...

    java操作日期时间工具类

    Java提供了多种工具类来帮助开发者进行日期时间的操作,其中最常用的是`java.util.Date`、`java.util.Calendar`以及`java.time`包中的类。本篇将重点介绍Java操作日期时间的工具类,特别是通过`DateUtil.java`这个...

    Java常用工具类大全,工作5年精心整理.zip

    "Java常用工具类大全,工作5年精心整理.zip"这个压缩包文件很可能包含了一位有经验的Java开发者在五年工作中积累的各种实用工具类,这些工具类能够极大地提高开发效率,简化代码编写。以下是对可能包含的知识点进行...

    java常用工具类集合(也有转自他人的)

    总结来说,"java常用工具类集合"是一个涵盖了多种实用工具类的资源,包括但不限于字符串处理、集合操作、日期时间、IO操作等多个方面。通过学习和应用这些工具类,开发者能够更高效地编写代码,同时也能从开源社区中...

    java常用开发工具类大全

    在Java编程语言中,工具类(Utility Classes)是程序员日常工作中不可或缺的一部分,它们提供了一系列静态方法,用于执行特定任务或处理特定数据类型。"java常用开发工具类大全"可能包含了一系列这样的工具类,旨在...

    JAVA28个常用工具类

    在Java编程语言中,工具类(Utility Class)是封装了常用功能的方法集合,方便开发者在项目中快速调用,提高代码复用性。以下是对给定的九个工具类的详细说明: 1. **FileUtils.java**: 文件操作工具类,提供了处理...

    JAVA对象以及数据的工具类

    比如,Files类(在Java NIO.2中引入)提供了大量的文件操作方法,如读写文件、检查文件属性等。而在网络编程中,HttpURLConnection和HttpClient类可以帮助我们发送HTTP请求和处理响应。 总的来说,Java工具类是对...

Global site tag (gtag.js) - Google Analytics