博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java时间处理工具类--DateUtils
阅读量:6312 次
发布时间:2019-06-22

本文共 11180 字,大约阅读时间需要 37 分钟。

package com.hexiang.utils;/** * @(#)DateUtil.java * * * @author kidd * @version 1.00 2007/8/8 */import java.util.*;import java.text.*;import java.sql.Timestamp;public class DateUtils {	/**	 * 时间范围:年	 */	public static final int YEAR = 1;	/**	 * 时间范围:季度	 */	public static final int QUARTER = 2;	/**	 * 时间范围:月	 */	public static final int MONTH = 3;	/**	 * 时间范围:旬	 */	public static final int TENDAYS = 4;	/**	 * 时间范围:周	 */	public static final int WEEK = 5;	/**	 * 时间范围:日	 */	public static final int DAY = 6;	/* 基准时间 */	private Date fiducialDate = null;	private Calendar cal = null;	private DateUtils(Date fiducialDate) {		if (fiducialDate != null) {			this.fiducialDate = fiducialDate;		} else {			this.fiducialDate = new Date(System.currentTimeMillis());		}		this.cal = Calendar.getInstance();		this.cal.setTime(this.fiducialDate);		this.cal.set(Calendar.HOUR_OF_DAY, 0);		this.cal.set(Calendar.MINUTE, 0);		this.cal.set(Calendar.SECOND, 0);		this.cal.set(Calendar.MILLISECOND, 0);		this.fiducialDate = this.cal.getTime();	}	/**	 * 获取DateHelper实例	 * 	 * @param fiducialDate	 *            基准时间	 * @return Date	 */	public static DateUtils getInstance(Date fiducialDate) {		return new DateUtils(fiducialDate);	}	/**	 * 获取DateHelper实例, 使用当前时间作为基准时间	 * 	 * @return Date	 */	public static DateUtils getInstance() {		return new DateUtils(null);	}	/**	 * 获取年的第一天	 * 	 * @param offset	 *            偏移量	 * @return Date	 */	public Date getFirstDayOfYear(int offset) {		cal.setTime(this.fiducialDate);		cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + offset);		cal.set(Calendar.MONTH, Calendar.JANUARY);		cal.set(Calendar.DAY_OF_MONTH, 1);		return cal.getTime();	}	/**	 * 获取年的最后一天	 * 	 * @param offset	 *            偏移量	 * @return Date	 */	public Date getLastDayOfYear(int offset) {		cal.setTime(this.fiducialDate);		cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) + offset);		cal.set(Calendar.MONTH, Calendar.DECEMBER);		cal.set(Calendar.DAY_OF_MONTH, 31);		return cal.getTime();	}	/**	 * 获取季度的第一天	 * 	 * @param offset	 *            偏移量	 * @return Date	 */	public Date getFirstDayOfQuarter(int offset) {		cal.setTime(this.fiducialDate);		cal.add(Calendar.MONTH, offset * 3);		int mon = cal.get(Calendar.MONTH);		if (mon >= Calendar.JANUARY && mon <= Calendar.MARCH) {			cal.set(Calendar.MONTH, Calendar.JANUARY);			cal.set(Calendar.DAY_OF_MONTH, 1);		}		if (mon >= Calendar.APRIL && mon <= Calendar.JUNE) {			cal.set(Calendar.MONTH, Calendar.APRIL);			cal.set(Calendar.DAY_OF_MONTH, 1);		}		if (mon >= Calendar.JULY && mon <= Calendar.SEPTEMBER) {			cal.set(Calendar.MONTH, Calendar.JULY);			cal.set(Calendar.DAY_OF_MONTH, 1);		}		if (mon >= Calendar.OCTOBER && mon <= Calendar.DECEMBER) {			cal.set(Calendar.MONTH, Calendar.OCTOBER);			cal.set(Calendar.DAY_OF_MONTH, 1);		}		return cal.getTime();	}	public Date getYesterday() {		long time = this.fiducialDate.getTime() - 60 * 60 * 24 * 1000;		return new Date(time);	}		public Date getTomorrow(){		long time = this.fiducialDate.getTime() + 60 * 60 * 24 * 1000;		return new Date(time);	}	/**	 * 获取季度的最后一天	 * 	 * @param offset	 *            偏移量	 * @return Date	 */	public Date getLastDayOfQuarter(int offset) {		cal.setTime(this.fiducialDate);		cal.add(Calendar.MONTH, offset * 3);		int mon = cal.get(Calendar.MONTH);		if (mon >= Calendar.JANUARY && mon <= Calendar.MARCH) {			cal.set(Calendar.MONTH, Calendar.MARCH);			cal.set(Calendar.DAY_OF_MONTH, 31);		}		if (mon >= Calendar.APRIL && mon <= Calendar.JUNE) {			cal.set(Calendar.MONTH, Calendar.JUNE);			cal.set(Calendar.DAY_OF_MONTH, 30);		}		if (mon >= Calendar.JULY && mon <= Calendar.SEPTEMBER) {			cal.set(Calendar.MONTH, Calendar.SEPTEMBER);			cal.set(Calendar.DAY_OF_MONTH, 30);		}		if (mon >= Calendar.OCTOBER && mon <= Calendar.DECEMBER) {			cal.set(Calendar.MONTH, Calendar.DECEMBER);			cal.set(Calendar.DAY_OF_MONTH, 31);		}		return cal.getTime();	}	/**	 * 获取月的最后一天	 * 	 * @param offset	 *            偏移量	 * @return Date	 */	public Date getFirstDayOfMonth(int offset) {		cal.setTime(this.fiducialDate);		cal.add(Calendar.MONTH, offset);		cal.set(Calendar.DAY_OF_MONTH, 1);		return cal.getTime();	}	/**	 * 获取月的最后一天	 * 	 * @param offset	 *            偏移量	 * @return Date	 */	public Date getLastDayOfMonth(int offset) {		cal.setTime(this.fiducialDate);		cal.add(Calendar.MONTH, offset + 1);		cal.set(Calendar.DAY_OF_MONTH, 1);		cal.add(Calendar.DAY_OF_MONTH, -1);		return cal.getTime();	}	/**	 * 获取旬的第一天	 * 	 * @param offset	 *            偏移量	 * @return Date	 */	public Date getFirstDayOfTendays(int offset) {		cal.setTime(this.fiducialDate);		int day = cal.get(Calendar.DAY_OF_MONTH);		if (day >= 21) {			day = 21;		} else if (day >= 11) {			day = 11;		} else {			day = 1;		}		if (offset > 0) {			day = day + 10 * offset;			int monOffset = day / 30;			day = day % 30;			cal.add(Calendar.MONTH, monOffset);			cal.set(Calendar.DAY_OF_MONTH, day);		} else {			int monOffset = 10 * offset / 30;			int dayOffset = 10 * offset % 30;			if ((day + dayOffset) > 0) {				day = day + dayOffset;			} else {				monOffset = monOffset - 1;				day = day - dayOffset - 10;			}			cal.add(Calendar.MONTH, monOffset);			cal.set(Calendar.DAY_OF_MONTH, day);		}		return cal.getTime();	}	/**	 * 获取旬的最后一天	 * 	 * @param offset	 *            偏移量	 * @return Date	 */	public Date getLastDayOfTendays(int offset) {		Date date = getFirstDayOfTendays(offset + 1);		cal.setTime(date);		cal.add(Calendar.DAY_OF_MONTH, -1);		return cal.getTime();	}	/**	 * 获取周的第一天(MONDAY)	 * 	 * @param offset	 *            偏移量	 * @return Date	 */	public Date getFirstDayOfWeek(int offset) {		cal.setTime(this.fiducialDate);		cal.add(Calendar.DAY_OF_MONTH, offset * 7);		cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);		return cal.getTime();	}	/**	 * 获取周的最后一天(SUNDAY)	 * 	 * @param offset	 *            偏移量	 * @return Date	 */	public Date getLastDayOfWeek(int offset) {		cal.setTime(this.fiducialDate);		cal.add(Calendar.DAY_OF_MONTH, offset * 7);		cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);		cal.add(Calendar.DAY_OF_MONTH, 6);		return cal.getTime();	}	/**	 * 获取指定时间范围的第一天	 * 	 * @param dateRangeType	 *            时间范围类型	 * @param offset	 *            偏移量	 * @return Date	 */	public Date getFirstDate(int dateRangeType, int offset) {		return null;	}	/**	 * 获取指定时间范围的最后一天	 * 	 * @param dateRangeType	 *            时间范围类型	 * @param offset	 *            偏移量	 * @return Date	 */	public Date getLastDate(int dateRangeType, int offset) {		return null;	}	/**	 * 根据日历的规则,为基准时间添加指定日历字段的时间量	 * 	 * @param field	 *            日历字段, 使用Calendar类定义的日历字段常量	 * @param offset	 *            偏移量	 * @return Date	 */	public Date add(int field, int offset) {		cal.setTime(this.fiducialDate);		cal.add(field, offset);		return cal.getTime();	}	/**	 * 根据日历的规则,为基准时间添加指定日历字段的单个时间单元	 * 	 * @param field	 *            日历字段, 使用Calendar类定义的日历字段常量	 * @param up	 *            指定日历字段的值的滚动方向。true:向上滚动 / false:向下滚动	 * @return Date	 */	public Date roll(int field, boolean up) {		cal.setTime(this.fiducialDate);		cal.roll(field, up);		return cal.getTime();	}	/**	 * 把字符串转换为日期	 * 	 * @param dateStr	 *            日期字符串	 * @param format	 *            日期格式	 * @return Date	 */	public static Date strToDate(String dateStr, String format) {		Date date = null;		if (dateStr != null && (!dateStr.equals(""))) {			DateFormat df = new SimpleDateFormat(format);			try {				date = df.parse(dateStr);			} catch (ParseException e) {				e.printStackTrace();			}		}		return date;	}	/**	 * 把字符串转换为日期,日期的格式为yyyy-MM-dd HH:ss	 * 	 * @param dateStr	 *            日期字符串	 * @return Date	 */	public static Date strToDate(String dateStr) {		Date date = null;		if (dateStr != null && (!dateStr.equals(""))) {			if (dateStr.matches("\\d{4}-\\d{1,2}-\\d{1,2}")) {				dateStr = dateStr + " 00:00";			} else if (dateStr.matches("\\d{4}-\\d{1,2}-\\d{1,2} \\d{1,2}")) {				dateStr = dateStr + ":00";			} else {				System.out.println(dateStr + " 格式不正确");				return null;			}			DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:ss");			try {				date = df.parse(dateStr);			} catch (ParseException e) {				e.printStackTrace();			}		}		return date;	}	/**	 * 把日期转换为字符串	 * 	 * @param date	 *            日期实例	 * @param format	 *            日期格式	 * @return Date	 */	public static String dateToStr(Date date, String format) {		return (date == null) ? "" : new SimpleDateFormat(format).format(date);	}	public static String dateToStr(Date date) {		return (date == null) ? ""				: new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(date);	}	/**	 * 取得当前日期 年-月-日	 * 	 * @return Date	 */	public static String getCurrentDate() {		DateFormat f = new SimpleDateFormat("yyyy-MM-dd");		return f.format(Calendar.getInstance().getTime());	}	public static void main(String[] args) {		DateUtils dateHelper = DateUtils.getInstance();		/* Year */		for (int i = -5; i <= 5; i++) {			System.out.println("FirstDayOfYear(" + i + ") = "					+ dateHelper.getFirstDayOfYear(i));			System.out.println("LastDayOfYear(" + i + ") = "					+ dateHelper.getLastDayOfYear(i));		}		/* Quarter */		for (int i = -5; i <= 5; i++) {			System.out.println("FirstDayOfQuarter(" + i + ") = "					+ dateHelper.getFirstDayOfQuarter(i));			System.out.println("LastDayOfQuarter(" + i + ") = "					+ dateHelper.getLastDayOfQuarter(i));		}		/* Month */		for (int i = -5; i <= 5; i++) {			System.out.println("FirstDayOfMonth(" + i + ") = "					+ dateHelper.getFirstDayOfMonth(i));			System.out.println("LastDayOfMonth(" + i + ") = "					+ dateHelper.getLastDayOfMonth(i));		}		/* Week */		for (int i = -5; i <= 5; i++) {			System.out.println("FirstDayOfWeek(" + i + ") = "					+ dateHelper.getFirstDayOfWeek(i));			System.out.println("LastDayOfWeek(" + i + ") = "					+ dateHelper.getLastDayOfWeek(i));		}		/* Tendays */		for (int i = -5; i <= 5; i++) {			System.out.println("FirstDayOfTendays(" + i + ") = "					+ dateHelper.getFirstDayOfTendays(i));			System.out.println("LastDayOfTendays(" + i + ") = "					+ dateHelper.getLastDayOfTendays(i));		}	}	/**	 * 取当前日期的字符串形式,"XXXX年XX月XX日"	 * 	 * @return java.lang.String	 */	public static String getPrintDate() {		String printDate = "";		Calendar calendar = Calendar.getInstance();		calendar.setTime(new Date());		printDate += calendar.get(Calendar.YEAR) + "年";		printDate += (calendar.get(Calendar.MONTH) + 1) + "月";		printDate += calendar.get(Calendar.DATE) + "日";		return printDate;	}	/**	 * 将指定的日期字符串转化为日期对象	 * 	 * @param dateStr	 *            日期字符串	 * @return java.util.Date	 */	public static Date getDate(String dateStr, String format) {		if (dateStr == null) {			return new Date();		}		if (format == null) {			format = "yyyy-MM-dd";		}		SimpleDateFormat sdf = new SimpleDateFormat(format);		try {			Date date = sdf.parse(dateStr);			return date;		} catch (Exception e) {			return null;		}	}	/**	 * 从指定Timestamp中得到相应的日期的字符串形式 日期"XXXX-XX-XX"	 * 	 * @param dateTime	 * @return 、String	 */	public static String getDateFromDateTime(Timestamp dateTime) {		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");		return sdf.format(dateTime).toString();	}	/**	 * 得到当前时间 return java.sql.Timestamp	 * 	 * @return Timestamp	 */	public static Timestamp getNowTimestamp() {		long curTime = System.currentTimeMillis();		return new Timestamp(curTime);	}}

  

转载于:https://www.cnblogs.com/gxbk629/p/4617303.html

你可能感兴趣的文章
不用Visual Studio,5分钟轻松实现一张报表
查看>>
人脸识别 开放书籍 下载地址
查看>>
Notepad++配置Python开发环境
查看>>
用户组概念 和 挂载 概念
查看>>
如何快速获取ADO连接字符串
查看>>
AspNetPager控件的最基本用法
查看>>
sessionKey
查看>>
高性能Javascript--脚本的无阻塞加载策略
查看>>
Java 编程的动态性, 第4部分: 用 Javassist 进行类转换--转载
查看>>
完毕port(CompletionPort)具体解释 - 手把手教你玩转网络编程系列之三
查看>>
iOS8 Push Notifications
查看>>
各大名企笔试及面经大全(程序猿必读)
查看>>
Oracle 连接、会话数的查看,修改
查看>>
Python使用QRCode模块生成二维码
查看>>
英语学习的重要性
查看>>
Android中Handler引起的内存泄露
查看>>
原产地政策,jsonp跨域
查看>>
HDU 1143 Tri Tiling(递归)
查看>>
ffmpeg参数具体解释
查看>>
记一次公司仓库数据库服务器死锁过程
查看>>