java日期计算工具类【包含常用的日期计算方法】

java日期计算工具类【包含常用的日期计算方法】

package com.test;

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

import com.util.CommonDateParseUtil;

/**
 * @作者 王建明
 * @创建日期 2012-12-27
 * @创建时间 下午03:47:52
 * @版本号 V 1.0
 */
public class DateTest {
	public static void main(String[] args) {
		// testGetDateStr();

//		System.out.println(CommonDateParseUtil.date2string(
//				firstDayOfWeek(new Date()), CommonDateParseUtil.YYYY_MM_DD));
//		System.out.println(CommonDateParseUtil.date2string(
//				lastDayOfWeek(new Date()), CommonDateParseUtil.YYYY_MM_DD));
		
		System.out.println(lastDayOfMonth());
	}

	/**
	 * 
	 * @作者 王建明
	 * @创建日期 2013-01-24
	 * @创建时间 08:36:08
	 * @描述 ——
	 */

	private static void testGetDateStr() {
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		DateTest test = new DateTest();
		// Date
		Date currentDate = new Date();
		System.out.println("当前日期是:" + df.format(currentDate));
		System.out.println("一周后的日期是:" + df.format(test.nextWeek(currentDate)));
		System.out.println("一月后的日期是:" + df.format(test.nextMonth(currentDate)));
		System.out.println("一年后的日期是:" + df.format(test.nextYear(currentDate)));
		// Timestamp
		Timestamp currentTime = new Timestamp(System.currentTimeMillis());
		System.out.println("当前日期是:" + df.format(currentTime));
		System.out.println("一周后的日期是:" + df.format(test.nextWeek(currentTime)));
		System.out.println("一月后的日期是:" + df.format(test.nextMonth(currentTime)));
		System.out.println("一年后的日期是:" + df.format(test.nextYear(currentTime)));
		// 另一种计算方式,这种方式计算月和年的日期比较困难
		Timestamp nextTime = new Timestamp(currentTime.getTime() + 7 * 24 * 60
				* 60 * 1000);
		System.out.println("当前日期是:" + df.format(currentTime));
		System.out.println("一周后的日期是:" + df.format(nextTime));
	}

	// 获取下一周的日期
	public static Date nextWeek(Date currentDate) {
		GregorianCalendar cal = new GregorianCalendar();
		cal.setTime(currentDate);
		cal.add(GregorianCalendar.DATE, 7);// 在日期上加7天
		return cal.getTime();
	}

	// 获取本周日的日期
	public static Date getSunday(Date monday) {
		GregorianCalendar cal = new GregorianCalendar();
		cal.setTime(monday);
		cal.add(GregorianCalendar.DATE, 6);// 在日期上加6天
		return cal.getTime();
	}

	// 获取下一月的日期
	public Date nextMonth(Date currentDate) {
		GregorianCalendar cal = new GregorianCalendar();
		cal.setTime(currentDate);
		cal.add(GregorianCalendar.MONTH, 1);// 在月份上加1
		return cal.getTime();
	}

	// 获取下一年的日期
	public Date nextYear(Date currentDate) {
		GregorianCalendar cal = new GregorianCalendar();
		cal.setTime(currentDate);
		cal.add(GregorianCalendar.YEAR, 1);// 在年上加1
		return cal.getTime();
	}

	/**
	 * @param date
	 * @return
	 * @作者 王建明
	 * @创建日期 2013-06-06
	 * @创建时间 10:47:36
	 * @描述 —— 获取日期为该月的第几周
	 */
	public static int getWeekInMonthNum(Date date) {
		GregorianCalendar cal = new GregorianCalendar();
		cal.setTime(date);
		int week = cal.get(Calendar.WEEK_OF_MONTH);// 获取是本月的第几周
		return week;
	}

	/**
	 * @作者 王建明
	 * @创建日期 2013-01-24
	 * @创建时间 08:43:41
	 * @描述 —— 获取当前日期的本周第一天
	 */
	public static Date firstDayOfWeek(Date date) {
		int year = Integer.parseInt(CommonDateParseUtil.getNowYear());
		int month = Integer.parseInt(CommonDateParseUtil.getNowMonth());
		int day = Integer.parseInt(CommonDateParseUtil.getNowDay());

		// 取本周第一天 最后一天
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.MONTH, month - 1);
		calendar.set(Calendar.DAY_OF_MONTH, day);
		calendar.getTime();
		calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

		return calendar.getTime();
	}

	/**
	 * @param date
	 * @return
	 * @作者 王建明
	 * @创建日期 2013-01-24
	 * @创建时间 08:48:03
	 * @描述 —— 获取本周最后一天
	 */
	public static Date lastDayOfWeek(Date date) {
		int year = Integer.parseInt(CommonDateParseUtil.getNowYear());
		int month = Integer.parseInt(CommonDateParseUtil.getNowMonth());
		int day = Integer.parseInt(CommonDateParseUtil.getNowDay());

		// 取本周最后一天
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.MONTH, month - 1);
		calendar.set(Calendar.DAY_OF_MONTH, day);
		calendar.getTime();
		calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

		return getSunday(calendar.getTime());
	}

	/**
	 * @return
	 * @作者 王建明
	 * @创建日期 2013-01-24
	 * @创建时间 08:53:51
	 * @描述 —— 获取本月第一天
	 */
	public static String firstDayOfMonth() {
		Calendar cal = Calendar.getInstance();

		SimpleDateFormat datef = new SimpleDateFormat("yyyy-MM-dd");
		cal.set(Calendar.DATE, 1);
		cal.roll(Calendar.DATE, -1);
		// 当前月的第一天
		cal.set(GregorianCalendar.DAY_OF_MONTH, 1);
		Date beginTime = cal.getTime();
		String beginTime1 = datef.format(beginTime) + " 00:00:00";
		return beginTime1;
	}

	/**
	 * @return
	 * @作者 王建明
	 * @创建日期 2013-01-24
	 * @创建时间 08:54:06
	 * @描述 —— 获取本月最后一天
	 */
	public static String lastDayOfMonth() {
		Calendar cal = Calendar.getInstance();

		SimpleDateFormat datef = new SimpleDateFormat("yyyy-MM-dd");
		// 当前月的最后一天
		cal.set(Calendar.DATE, 1);
		cal.roll(Calendar.DATE, -1);
		Date endTime = cal.getTime();
		String endTime1 = datef.format(endTime) + " 23:59:59";
		return endTime1;
	}

	/**
	 * @return
	 * @作者 王建明
	 * @创建日期 2013-05-22
	 * @创建时间 09:48:04
	 * @描述 —— 获取当前星期数字
	 */
	public static int getNowWeekNum() {
		int weekDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
		return weekDay == 1 ? 7 : weekDay - 1;
	}

	/**
	 * @param week——周几数字【周一到周日分别对应1-7】
	 * @param time——时刻数字【例如:12代表12:00~12:59时间段】
	 * @return
	 * @作者 王建明
	 * @创建日期 2013-05-22
	 * @创建时间 16:09:29
	 * @描述 —— 根据星期和时刻获取当前周的相应时间日期
	 */
	public static Date getNowWeekDate(int week, int time) {
		int mondayPlus = getMondayPlus() + (week - 1);
		GregorianCalendar currentDate = new GregorianCalendar();
		currentDate.add(GregorianCalendar.DATE, mondayPlus);
		Date date = currentDate.getTime();
		String dateStr = CommonDateParseUtil.date2string(date,
				CommonDateParseUtil.YYYY_MM_DD);
		if (time < 10)
			dateStr += (" 0" + time + ":00:00");
		else
			dateStr += (" " + time + ":00:00");
		// return preMonday;
		return CommonDateParseUtil.string2date(dateStr,
				CommonDateParseUtil.YYYY_MM_DD_HH_MM_SS);
	}

	// 获得当前日期与本周一相差的天数
	private static int getMondayPlus() {
		Calendar cd = Calendar.getInstance();
		// 获得今天是一周的第几天,星期日是第一天,星期二是第二天......
		int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);
		if (dayOfWeek == 1) {
			return -6;
		} else {
			return 2 - dayOfWeek;
		}
	}

	/**
	 * @param currentDate
	 * @param num
	 * @return
	 * @作者 王建明
	 * @创建日期 2013-6-8
	 * @创建时间 下午2:44:24
	 * @描述 —— 获取与指定日期距离num天的日期
	 */
	public static Date getDateFromSourceDate(Date currentDate, int num) {
		GregorianCalendar cal = new GregorianCalendar();
		cal.setTime(currentDate);
		cal.add(GregorianCalendar.DATE, num);
		return cal.getTime();
	}

	/**
	 * @param date1
	 * @param date2
	 * @return
	 * @作者 王建明
	 * @创建日期 2013-06-20
	 * @创建时间 14:08:37
	 * @描述 —— 计算两个日期相隔多少天
	 */
	public static long differ(Date date1, Date date2) {
		Long differLong = date2.getTime() / 86400000 - date1.getTime()
				/ 86400000; // 用立即数,减少乘法计算的开销
		return Math.abs(differLong);
	}
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值