发表评论
public class DateUtil {
public enum DateType {
YEAR, MONTH, DAY, HH, MI, SS, YYYY_MM_DD, YYYYMMDD
}
/**
* 日期加运算
*
* @param date
* 需要加的日期
* @param dateType
* 需要加的类型<br>
* 数值可以为年份,DateType.YEAR<br>
* 数值可以为月份,DateType.MONTH<br>
* 数值可以为天数,DateType.DAY<br>
* 数值可以为小时,DateType.HH<br>
* 数值可以为分钟,DateType.MI<br>
* 数值可以为秒,DateType.SS
* @param num
* 需要加的数值
* @return 加完之后的日期
*/
public static Date addDate(Date date, DateType dateType, int num) {
Calendar c1 = Calendar.getInstance();
c1.setTime(date);
if (DateType.YEAR.equals(dateType)) {
c1.add(Calendar.YEAR, num);
return c1.getTime();
}
if (DateType.MONTH.equals(dateType)) {
c1.add(Calendar.MONTH, num);
return c1.getTime();
}
if (DateType.DAY.equals(dateType)) {
c1.add(Calendar.DAY_OF_MONTH, num);
return c1.getTime();
}
if (DateType.HH.equals(dateType)) {
c1.add(Calendar.HOUR_OF_DAY, num);
return c1.getTime();
}
if (DateType.MI.equals(dateType)) {
c1.add(Calendar.MINUTE, num);
return c1.getTime();
}
if (DateType.SS.equals(dateType)) {
c1.add(Calendar.SECOND, num);
return c1.getTime();
}
return date;
}
/**
* 返回前一天。
*
* @param date
* @return
*/
public static java.sql.Date theDayBefore(Date date) {
Calendar cdate = Calendar.getInstance();
cdate.setTime(date);
cdate.add(Calendar.DATE, -1);
java.sql.Date ldate = new java.sql.Date(cdate.getTime().getTime());
return ldate;
}
/**
* 得到当前月的第一天
*
* @return
*/
public static java.sql.Date getNowMonth() {
Calendar date = Calendar.getInstance();
date.set(Calendar.DAY_OF_MONTH, 1);
java.sql.Date sysDate = new java.sql.Date(date.getTime().getTime());
return sysDate;
}
/**
* 指定月当月1日
*
* @param date
* @return
*/
public static java.sql.Date firstDayOfMonth(Date date) {
Calendar cal = Calendar.getInstance();
if (date != null)
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return new java.sql.Date(cal.getTimeInMillis());
}
/**
* 得到指定日期的在这个月的第一日. 00:00:00
*
* @param date
* @return
*/
public static Date getFirstDayOfMonth(Date date) {
Calendar cal = Calendar.getInstance();
if (date != null)
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* 得到上月1日
*
* @return
*/
public static java.sql.Date getlastMonth() {
Calendar date = Calendar.getInstance();
date.add(Calendar.MONTH, -1);
date.set(Calendar.DAY_OF_MONTH, 1);
java.sql.Date sysDate = new java.sql.Date(date.getTime().getTime());
return sysDate;
}
/**
* 指定月上月1日
*
* @return
*/
public static java.sql.Date firstDayOfLastMonth(Date date) {
Calendar cal = Calendar.getInstance();
if (date != null)
cal.setTime(date);
cal.add(Calendar.MONTH, -1);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return new java.sql.Date(cal.getTimeInMillis());
}
/**
* 指定月次月1日
*
* @param calcdate
* @return
* @throws ParseException
*/
public static String firstDayOfNextMonth(String calcdate) {
return DateUtil.date2String(DateUtil.firstDayOfNextMonth(DateUtil
.string2Date(calcdate)));
}
/**
* 指定日次月1日
*
* @param calcdate
* @return
* @throws ParseException
*/
public static java.sql.Date firstDayOfNextMonth(Date calcdate) {
Calendar date = Calendar.getInstance();
date.setTime(calcdate);
date.add(Calendar.MONTH, 1);// 设置月为下个月
// 设置日为月第一天
date.set(Calendar.DAY_OF_MONTH, date.getMinimum(Calendar.DAY_OF_MONTH));
java.sql.Date sysDate = new java.sql.Date(date.getTime().getTime());
return sysDate;
}
/**
* 日期比较
* <p>
* 开始日期在结束日期之前返回-1<br>
* 开始日期等于结束日期返回0<br>
* 开始日期在结束日期之后返回1
*
* @param startDate
* 起始日期
* @param endDate
* 结束日期
* @return
*/
public static int compareDate(Date startDate, Date endDate) {
// 去除掉时分秒的时间
startDate = DateUtil.string2Date(startDate.toString());
endDate = DateUtil.string2Date(endDate.toString());
if (startDate.before(endDate)) {
return -1;
}
if (startDate.equals(endDate)) {
return 0;
}
if (startDate.after(endDate)) {
return 1;
}
return -2;
}
/**
* 得到本年指定日期的相关月份的最后一日 00:00:00
*
* @param date
* @return
*/
public static Date getLastDayOfMonthThisYear(Date date) {
Calendar cal = Calendar.getInstance();
if (date != null)
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH,
cal.getActualMaximum(Calendar.DAY_OF_MONTH));
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
return cal.getTime();
}
/**
* 得到指定日期的当月最后一天
*
* @param date
* 指定日期
* @return 当月最后一天
*/
public static java.sql.Date getLastDayOfMonth(Date date) {
Calendar cal = Calendar.getInstance();
if (date != null)
cal.setTime(date);
cal.add(Calendar.MONTH, 1);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.add(Calendar.DAY_OF_MONTH, -1);
return new java.sql.Date(cal.getTime().getTime());
}
/**
* 得到前一个月的1号
*
* @param date
* 指定日期
* @return 前一个月的1号
*/
public static java.sql.Date getBeforeMonth(Date date) {
Calendar cal = Calendar.getInstance();
if (date != null)
cal.setTime(date);
cal.add(Calendar.MONTH, -1);
cal.set(Calendar.DAY_OF_MONTH, 1);
return new java.sql.Date(cal.getTime().getTime());
}
/**
* 得到给定时间所在季度前后的某个季度的开始时间,返回时间格式:2014-01-01
* @param date
* @param differ
* @return Date
* @description:以给定时间所在季度为原点,则:
* 当前季度 differ=0,前一个季度 differ=-1,
前前一个季度 differ=-2,下一个季度 differ=1,下下个季度 differ=2
*/
public static Date getQuarterStartTime(Date date, int differ){
Calendar c = Calendar.getInstance();
c.setTimeInMillis(date.getTime());
int currentMonth = c.get(Calendar.MONTH) + 1;
Date now = new Date();
int month = 0;
try {
if (currentMonth >= 1 && currentMonth <= 3) {
month = 0;
} else if (currentMonth >= 4 && currentMonth <= 6) {
month = 3;
} else if (currentMonth >= 7 && currentMonth <= 9) {
month = 6;
} else if (currentMonth >= 10 && currentMonth <= 12) {
month = 9;
}
month += differ *3;
c.set(Calendar.MONTH, month);
c.set(Calendar.DATE, 1);
now.setTime(c.getTimeInMillis());
now = DateUtil.string2Date(date2String(now));
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
/**
* 得到前季度的开始时间,返回时间格式:2014-01-01
* @return Date
* @description:以当前季度为原点,则:
* 当前季度 differ=0,前一个季度 differ=-1,
前前一个季度 differ=-2,下一个季度 differ=1,下下个季度 differ=2
*/
public static Date getQuarterStartTime(int differ) {
return getQuarterStartTime(new Date(), differ);
}
/**
*
* 得到给定时间所在季度前后的某个季度的最后一天,返回时间格式:2014-03-31
* @param date
* @param differ
* @return Date
* @description:以给定时间所在季度为原点,则:
* 当前季度 differ=0,前一个季度 differ=-1,
前前一个季度 differ=-2,下一个季度 differ=1,下下个季度 differ=2
*/
public static Date getQuarterEndTime(Date date, int differ){
Calendar c = Calendar.getInstance();
c.setTimeInMillis(date.getTime());
int currentMonth = c.get(Calendar.MONTH) + 1;
Date now = new Date();
int month = 0;
try {
if (currentMonth >= 1 && currentMonth <= 3) {
month = 2;
} else if (currentMonth >= 4 && currentMonth <= 6) {
month = 5;
} else if (currentMonth >= 7 && currentMonth <= 9) {
month = 8;
} else if (currentMonth >= 10 && currentMonth <= 12) {
month = 11;
}
month += differ *3;
c.set(Calendar.MONTH, month);
c.set(Calendar.DATE, 1);
now.setTime(c.getTimeInMillis());
now = DateUtil.string2Date(date2String(getLastDayOfMonth(now)));
} catch (Exception e) {
e.printStackTrace();
}
return now;
}
/**
*
* 得到当前季度前后的某个季度的最后一天,返回时间格式:2014-03-31
* @param date
* @return Date
* @description:以当前季度为原点,则:
* 当前季度 differ=0,前一个季度 differ=-1,
前前一个季度 differ=-2,下一个季度 differ=1,下下个季度 differ=2
*/
public static Date getQuarterEndTime(Date date){
return getQuarterEndTime(date, 0);
}
/**
* 得到某年的第一天
* @param date
* 要得年的第一天的年中任意月份
* @return Date
* 一年的第一天 例:2014-1-1
* @description:
*/
public static Date getFirstDayOfYear(Date date){
Calendar c = Calendar.getInstance();
c.setTimeInMillis(date.getTime());
c.set(Calendar.MONTH, 0);
c.set(Calendar.DAY_OF_MONTH, 1);
return date2date(c.getTime());
}
/**
* 得到日期中的“日”
*
* @param date
* 指定日期
* @return 日期中的“日”
*/
public static int getDayOfDate(Date date) {
Calendar cal = Calendar.getInstance();
if (date != null)
cal.setTime(date);
return cal.get(Calendar.DAY_OF_MONTH);
}
/**
* 得到日期中的“月”
* @param date
* @return int
* @description:从0开始 0 表示1月
*/
public static int getMonthOfDate(Date date){
Calendar cal = Calendar.getInstance();
if (date != null)
cal.setTime(date);
return cal.get(Calendar.MONTH);
}
public boolean equals(Object obj) {
// System.out.println("hello");
return false;
}
/**
* 得到指定日期的在这个月的第一日
*
* @param date
* @return
*/
public static java.sql.Date getFirstDayOfDateMonth(Date date) {
Calendar cal = Calendar.getInstance();
if (date != null)
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
java.sql.Date ldate = new java.sql.Date(cal.getTime().getTime());
return ldate;
}
/**
* 将java.sql.Timestamp类型日期,或java.util.Date类型转换为java.sql.Date类型
*
* @param obj
* @return
*/
public static java.sql.Date obj2SqlDate(Object obj) {
if (obj instanceof java.util.Date) {
return new java.sql.Date(((java.util.Date) obj).getTime());
}
throw new RuntimeException("入参不为日期类型");
}
/**
* 将java.sql.Date类型日期,
*或java.util.Date类型转换为java.sql.Timestamp类型
*
* @param obj
* @return
*/
public static Timestamp obj2Timestamp(Object obj) {
if (obj instanceof java.util.Date) {
return new java.sql.Timestamp(((java.util.Date) obj).getTime());
}
throw new RuntimeException("入参不为日期类型");
}
/**
* 计算年龄
* <p>
* 当前系统日期减去生日,得到年龄
*
* @param birthday
* 生日
* @return 年龄
*/
public static double calcAge(java.util.Date birthday) {
return DateUtil.calcAge(birthday,
new java.sql.Date(System.currentTimeMillis()));
}
/**
* 计算年龄
* <p>
* 指定日期减去生日,得到年龄
*
* @param birthday
* 生日
* @param date
* 指定日期
* @return 年龄
*/
public static double calcAge(java.util.Date birthday, java.util.Date date) {
Calendar _birthday = Calendar.getInstance();
_birthday.setTime(birthday);
Calendar _sysDate = Calendar.getInstance();
_sysDate.setTimeInMillis(date.getTime());
return _sysDate.get(Calendar.YEAR)
- _birthday.get(Calendar.YEAR)
+ (_sysDate.get(Calendar.MONTH) - _birthday.get(Calendar.MONTH))
/ 12.00
+ (_sysDate.get(Calendar.DAY_OF_MONTH) - _birthday
.get(Calendar.DAY_OF_MONTH)) / 365.00;
}
public static void main(String[] args) {
System.out.println(DateUtil.calcAge(DateUtil.string2Date("1988-3-5")));
System.out.println(DateUtil.calcAge(DateUtil.string2Date("1988-3-6")));
System.out.println(DateUtil.calcAge(DateUtil.string2Date("1988-3-7")));
System.out.println(DateUtil.getQuarterStartTime(new Date(),-2));
System.out.println(DateUtil.getFirstDayOfYear(new Date()));
System.out.println(DateUtil.getBeforeMonth(new Date()));
System.out.println(DateUtil.getlastMonth());
System.out.println(DateUtil.dateBetween(string2Date("2012-01-01")
, string2Date("2012-01-01"),DateType.MONTH));
System.out.println(DateUtil.getQuarterEndTime(new Date(), 3));
System.out.println(DateUtil.firstDayOfNextMonth(new Date()));
System.out.println(DateUtil.date2String(DateUtil.addDate(new Date()
, DateType.MONTH, -3)));
System.out.println(DateUtil.firstDayOfMonth(new Date()));
System.out.println(DateUtil.firstDayOfLastMonth(new Date()));
System.out.println(DateUtil.getMonthOfDate(new Date()));
System.out.println(DateUtil.date2String(DateUtil.addDate(
DateUtil.string2Date("2014-5-31"), DateType.MONTH, 1)));
System.out.println(DateUtil.getDayOfDate(new Date()));
}
}