import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 日期工具类:用于查询,统计,日历展现等应用中的时间处理
* @author lancelot
*
*/
public class DateUtil {
private static Calendar setMinTime(Calendar calendar) {
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar;
}
private static Calendar setMaxTime(Calendar calendar) {
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
return calendar;
}
/**
* 把时间设为最小,"00:00:00"
* @param date - date
* @return a new instance of date
*/
public static Date setMinTime(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return DateUtil.setMinTime(calendar).getTime();
}
/**
* 把时间设为最大,"23:59:59"
* @param date - date
* @return a new instance of date
*/
public static Date setMaxTime(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return DateUtil.setMaxTime(calendar).getTime();
}
//得到中午时间yyyy/MM/dd 12:00:00
public static Date setMidTime(Date date){
String date_str = new SimpleDateFormat("yyyy/MM/dd").format(date)+ " 12:00:00";
return StringTool.getStringDate(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"),date_str);
}
/**
* 得到日期所在月的首日
* @param date 日期
* @return 月的首日
*/
public static Date getThisMonthFirstDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DATE, 1);
return DateUtil.setMinTime(calendar).getTime();
}
/**
* 得到日期所在月的末日
* @param date 日期
* @return 月的末日
*/
public static Date getThisMonthLastDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return DateUtil.setMaxTime(calendar).getTime();
}
/**
* 得到上一个月的首日
* @param date
* @return
*/
public static Date getPreMonthFirstDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, -1);
return DateUtil.getThisMonthFirstDate(calendar.getTime());
}
/**
* 获得下个月的首日
* @param date
* @return
*/
public static Date getNextMonthFirstDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, 1);
return DateUtil.getThisMonthFirstDate(calendar.getTime());
}
/**
* 得到日期所在周的首日
* @param date 日期
* @return 一周的首日
*/
public static Date getThisWeekFirstDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_WEEK, calendar.getActualMinimum(Calendar.DAY_OF_WEEK));
return DateUtil.setMinTime(calendar).getTime();
}
/**
* 得到日期所在周的首日
* @param date
* @param firstDayIsSunday
* @return
*/
public static Date getThisWeekFirstDate(Date date, boolean firstDayIsSunday) {
if(firstDayIsSunday) {
return getThisWeekFirstDate(date);
} else {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
calendar.add(Calendar.DATE, -6);
} else {
calendar.set(Calendar.DAY_OF_WEEK, calendar.getActualMinimum(Calendar.DAY_OF_WEEK));
calendar.add(Calendar.DATE, 1);
}
return DateUtil.setMinTime(calendar).getTime();
}
}
/**
* 得到日期所在周的末日
* @param date 日期
* @return 一周的末日
*/
public static Date getThisWeekLastDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_WEEK, calendar.getActualMaximum(Calendar.DAY_OF_WEEK));
return DateUtil.setMaxTime(calendar).getTime();
}
/**
* 获得本周的最后一天
* @param date
* @param firstDayIsSunday
* @return
*/
public static Date getThisWeekLastDate(Date date, boolean firstDayIsSunday) {
if(firstDayIsSunday) {
return getThisWeekLastDate(date);
} else {
Date temp = getThisWeekFirstDate(date, firstDayIsSunday);
Calendar calendar = Calendar.getInstance();
calendar.setTime(temp);
calendar.add(Calendar.DATE, 6);
return DateUtil.setMaxTime(calendar).getTime();
}
}
/**
* 获得上一周的第一天
* @param date
* @return
*/
public static Date getPreWeekFirstDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.WEEK_OF_YEAR, -1);
return DateUtil.getThisWeekFirstDate(calendar.getTime());
}
/**
* 获得上一周的第一天
* @param date
* @param firstDayIsSunday
* @return
*/
public static Date getPreWeekFirstDate(Date date, boolean firstDayIsSunday) {
if(firstDayIsSunday) {
return getPreWeekFirstDate(date);
} else {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.WEEK_OF_YEAR, -1);
return DateUtil.getThisWeekFirstDate(calendar.getTime(), firstDayIsSunday);
}
}
/**
* 获得下一周的第一天
* @param date
* @return
*/
public static Date getNextWeekFirstDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.WEEK_OF_YEAR, 1);
return DateUtil.getThisWeekFirstDate(calendar.getTime());
}
/**
* 获得下一周的第一天
* @param date
* @param firstDayIsSunday
* @return
*/
public static Date getNextWeekFirstDate(Date date, boolean firstDayIsSunday) {
if(firstDayIsSunday) {
return getNextWeekFirstDate(date);
} else {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.WEEK_OF_YEAR, 1);
return DateUtil.getThisWeekFirstDate(calendar.getTime(), firstDayIsSunday);
}
}
/**
* 得到一个月有几个星期,星期日为一星期的首日,只要一个星期中有一天在这个月就算一个星期
* @param date 日期
* @return 一个月中的星期数
*/
public static int getWeekCountPerMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.setFirstDayOfWeek(Calendar.SUNDAY);
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return calendar.get(Calendar.WEEK_OF_MONTH);
}
/**
* 得到一月的第一天是周几,周日为1,周一为2,以此类推
* @param date 日期
* @return
*/
public static int getMonthFirstDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, 1);
return calendar.get(Calendar.DAY_OF_WEEK);
}
/**
* 得到一个月有几天
* @param date 日期
* @return
*/
public static int getDayCountPerMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.setFirstDayOfWeek(Calendar.SUNDAY);
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return calendar.get(Calendar.DAY_OF_MONTH);
}
/**
* 获得去年该月的首日
* @param date
* @return
*/
public static Date getPreYearMonthFirstDate( Date date ){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add( Calendar.YEAR , -1) ;
return DateUtil.getThisMonthFirstDate( calendar.getTime() ) ;
}
/**
* 获得去年该月的未日
* @param date
* @return
*/
public static Date getPreYearMonthLastDate( Date date ){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add( Calendar.YEAR , -1) ;
return DateUtil.getThisMonthLastDate( calendar.getTime() ) ;
}
/**
* 获得去年该日
* @param date
* @return
*/
public static Date getPreYearDate( Date date ){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add( Calendar.YEAR , -1) ;
return calendar.getTime();
}
/**
* 获得该年的第一天
* @param date
* @return
*/
public static Date getFirstDayOfYear( Date date ){
Calendar calendar = Calendar.getInstance() ;
calendar.setTime( date ) ;
calendar.set( Calendar.DAY_OF_YEAR , 1 ) ;
return DateUtil.setMinTime( calendar.getTime() ) ;
}
/**
* 获得去年的首日
* @param date
* @return
*/
public static Date getPreYearFirstDayOfYear( Date date ){
Calendar calendar = Calendar.getInstance() ;
calendar.setTime( date ) ;
calendar.add( Calendar.YEAR , -1) ;
return DateUtil.getFirstDayOfYear( calendar.getTime() ) ;
}
}
import java.util.Calendar;
import java.util.Date;
/**
* 日期工具类:用于查询,统计,日历展现等应用中的时间处理
* @author lancelot
*
*/
public class DateUtil {
private static Calendar setMinTime(Calendar calendar) {
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar;
}
private static Calendar setMaxTime(Calendar calendar) {
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
return calendar;
}
/**
* 把时间设为最小,"00:00:00"
* @param date - date
* @return a new instance of date
*/
public static Date setMinTime(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return DateUtil.setMinTime(calendar).getTime();
}
/**
* 把时间设为最大,"23:59:59"
* @param date - date
* @return a new instance of date
*/
public static Date setMaxTime(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return DateUtil.setMaxTime(calendar).getTime();
}
//得到中午时间yyyy/MM/dd 12:00:00
public static Date setMidTime(Date date){
String date_str = new SimpleDateFormat("yyyy/MM/dd").format(date)+ " 12:00:00";
return StringTool.getStringDate(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"),date_str);
}
/**
* 得到日期所在月的首日
* @param date 日期
* @return 月的首日
*/
public static Date getThisMonthFirstDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DATE, 1);
return DateUtil.setMinTime(calendar).getTime();
}
/**
* 得到日期所在月的末日
* @param date 日期
* @return 月的末日
*/
public static Date getThisMonthLastDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return DateUtil.setMaxTime(calendar).getTime();
}
/**
* 得到上一个月的首日
* @param date
* @return
*/
public static Date getPreMonthFirstDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, -1);
return DateUtil.getThisMonthFirstDate(calendar.getTime());
}
/**
* 获得下个月的首日
* @param date
* @return
*/
public static Date getNextMonthFirstDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, 1);
return DateUtil.getThisMonthFirstDate(calendar.getTime());
}
/**
* 得到日期所在周的首日
* @param date 日期
* @return 一周的首日
*/
public static Date getThisWeekFirstDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_WEEK, calendar.getActualMinimum(Calendar.DAY_OF_WEEK));
return DateUtil.setMinTime(calendar).getTime();
}
/**
* 得到日期所在周的首日
* @param date
* @param firstDayIsSunday
* @return
*/
public static Date getThisWeekFirstDate(Date date, boolean firstDayIsSunday) {
if(firstDayIsSunday) {
return getThisWeekFirstDate(date);
} else {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
calendar.add(Calendar.DATE, -6);
} else {
calendar.set(Calendar.DAY_OF_WEEK, calendar.getActualMinimum(Calendar.DAY_OF_WEEK));
calendar.add(Calendar.DATE, 1);
}
return DateUtil.setMinTime(calendar).getTime();
}
}
/**
* 得到日期所在周的末日
* @param date 日期
* @return 一周的末日
*/
public static Date getThisWeekLastDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_WEEK, calendar.getActualMaximum(Calendar.DAY_OF_WEEK));
return DateUtil.setMaxTime(calendar).getTime();
}
/**
* 获得本周的最后一天
* @param date
* @param firstDayIsSunday
* @return
*/
public static Date getThisWeekLastDate(Date date, boolean firstDayIsSunday) {
if(firstDayIsSunday) {
return getThisWeekLastDate(date);
} else {
Date temp = getThisWeekFirstDate(date, firstDayIsSunday);
Calendar calendar = Calendar.getInstance();
calendar.setTime(temp);
calendar.add(Calendar.DATE, 6);
return DateUtil.setMaxTime(calendar).getTime();
}
}
/**
* 获得上一周的第一天
* @param date
* @return
*/
public static Date getPreWeekFirstDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.WEEK_OF_YEAR, -1);
return DateUtil.getThisWeekFirstDate(calendar.getTime());
}
/**
* 获得上一周的第一天
* @param date
* @param firstDayIsSunday
* @return
*/
public static Date getPreWeekFirstDate(Date date, boolean firstDayIsSunday) {
if(firstDayIsSunday) {
return getPreWeekFirstDate(date);
} else {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.WEEK_OF_YEAR, -1);
return DateUtil.getThisWeekFirstDate(calendar.getTime(), firstDayIsSunday);
}
}
/**
* 获得下一周的第一天
* @param date
* @return
*/
public static Date getNextWeekFirstDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.WEEK_OF_YEAR, 1);
return DateUtil.getThisWeekFirstDate(calendar.getTime());
}
/**
* 获得下一周的第一天
* @param date
* @param firstDayIsSunday
* @return
*/
public static Date getNextWeekFirstDate(Date date, boolean firstDayIsSunday) {
if(firstDayIsSunday) {
return getNextWeekFirstDate(date);
} else {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.WEEK_OF_YEAR, 1);
return DateUtil.getThisWeekFirstDate(calendar.getTime(), firstDayIsSunday);
}
}
/**
* 得到一个月有几个星期,星期日为一星期的首日,只要一个星期中有一天在这个月就算一个星期
* @param date 日期
* @return 一个月中的星期数
*/
public static int getWeekCountPerMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.setFirstDayOfWeek(Calendar.SUNDAY);
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return calendar.get(Calendar.WEEK_OF_MONTH);
}
/**
* 得到一月的第一天是周几,周日为1,周一为2,以此类推
* @param date 日期
* @return
*/
public static int getMonthFirstDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, 1);
return calendar.get(Calendar.DAY_OF_WEEK);
}
/**
* 得到一个月有几天
* @param date 日期
* @return
*/
public static int getDayCountPerMonth(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.setFirstDayOfWeek(Calendar.SUNDAY);
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return calendar.get(Calendar.DAY_OF_MONTH);
}
/**
* 获得去年该月的首日
* @param date
* @return
*/
public static Date getPreYearMonthFirstDate( Date date ){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add( Calendar.YEAR , -1) ;
return DateUtil.getThisMonthFirstDate( calendar.getTime() ) ;
}
/**
* 获得去年该月的未日
* @param date
* @return
*/
public static Date getPreYearMonthLastDate( Date date ){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add( Calendar.YEAR , -1) ;
return DateUtil.getThisMonthLastDate( calendar.getTime() ) ;
}
/**
* 获得去年该日
* @param date
* @return
*/
public static Date getPreYearDate( Date date ){
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add( Calendar.YEAR , -1) ;
return calendar.getTime();
}
/**
* 获得该年的第一天
* @param date
* @return
*/
public static Date getFirstDayOfYear( Date date ){
Calendar calendar = Calendar.getInstance() ;
calendar.setTime( date ) ;
calendar.set( Calendar.DAY_OF_YEAR , 1 ) ;
return DateUtil.setMinTime( calendar.getTime() ) ;
}
/**
* 获得去年的首日
* @param date
* @return
*/
public static Date getPreYearFirstDayOfYear( Date date ){
Calendar calendar = Calendar.getInstance() ;
calendar.setTime( date ) ;
calendar.add( Calendar.YEAR , -1) ;
return DateUtil.getFirstDayOfYear( calendar.getTime() ) ;
}
}