Calendar获取特殊的时间节点
害,项目需要使用一些特殊节点,咱也不知道产品的脑回路是啥样的,也不知道客户咋就同意了的
得,别的不说,光这些时间节点的数据就挺费人的,给自己写的分享一下吧
import java.util.Calendar;
import java.util.Date;
/**
* @author sgu
*/
public class DateUtils {
/**
* 获取当前日期年末
*
* @return 日期
*/
public static Date getYearEnd() {
Calendar calendar = Calendar.getInstance();
calendar.clear(Calendar.MONTH);
calendar.add(Calendar.MONTH, Calendar.DECEMBER);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
initTimeMax(calendar);
return calendar.getTime();
}
/**
* 获取当前日期年初
*
* @return 日期
*/
public static Date getYearStart() {
Calendar calendar = Calendar.getInstance();
calendar.clear(Calendar.MONTH);
calendar.add(Calendar.YEAR, Calendar.AM);
calendar.set(Calendar.DAY_OF_MONTH, Calendar.SUNDAY);
initTimeMin(calendar);
return calendar.getTime();
}
/**
* 获取指定日期的月初
*
* @param date 指定日期
* @return 日期
*/
public static Date getNowMonthStart(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, Calendar.SUNDAY);
calendar.add(Calendar.MONTH, Calendar.AM);
initTimeMin(calendar);
return calendar.getTime();
}
public static void initTimeMin(Calendar calendar) {
calendar.set(Calendar.HOUR_OF_DAY, Calendar.AM);
calendar.set(Calendar.MINUTE, Calendar.AM);
calendar.set(Calendar.SECOND, Calendar.AM);
calendar.set(Calendar.MILLISECOND, Calendar.AM);
}
public static void initTimeMax(Calendar calendar) {
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
}
/**
* 获取指定日期的月末
*
* @param date 指定日期
* @return 日期
*/
public static Date getNowMonthEnd(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH, lastDay);
initTimeMax(calendar);
return calendar.getTime();
}
/**
* 获取指定日期的周一 (中国周一 )
*
* @param date 指定日期
* @return 日期
*/
public static Date getNowWeekStart(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayWeek = calendar.get(Calendar.DAY_OF_WEEK);
if (dayWeek == Calendar.SUNDAY) {
calendar.add(Calendar.DAY_OF_MONTH, -Calendar.SUNDAY);
}
calendar.setFirstDayOfWeek(Calendar.MONDAY);
int day = calendar.get(Calendar.DAY_OF_WEEK);
calendar.add(Calendar.DATE, calendar.getFirstDayOfWeek() - day);
initTimeMin(calendar);
return calendar.getTime();
}
/**
* 获取指定日期的周日(中国周末)
*
* @param date 指定日期
* @return 日期
*/
public static Date getNowWeekEnd(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int dayWeek = calendar.get(Calendar.DAY_OF_WEEK);
if (dayWeek == Calendar.SUNDAY) {
calendar.add(Calendar.DAY_OF_MONTH, -Calendar.SUNDAY);
}
calendar.setFirstDayOfWeek(Calendar.MONDAY);
int day = calendar.get(Calendar.DAY_OF_WEEK);
calendar.add(Calendar.DATE, calendar.getFirstDayOfWeek() - day + Calendar.FRIDAY);
initTimeMax(calendar);
return calendar.getTime();
}
/**
* 获取指定日期的所属季度初始日期
*
* @param date 指定日期
* @return 日期
*/
public static Date getNowQuarterStart(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int month = calendar.get(Calendar.MONTH);
int quarter = month / Calendar.APRIL + Calendar.SUNDAY;
int startMonth = Calendar.SUNDAY;
if (quarter == Calendar.MONDAY) {
startMonth = Calendar.WEDNESDAY;
} else if (quarter == Calendar.TUESDAY) {
startMonth = Calendar.SATURDAY;
} else if (quarter == Calendar.WEDNESDAY) {
startMonth = Calendar.HOUR;
}
calendar.set(Calendar.MONTH, startMonth - Calendar.SUNDAY);
calendar.set(Calendar.DAY_OF_MONTH, Calendar.SUNDAY);
initTimeMin(calendar);
return calendar.getTime();
}
/**
* 获取指定日期的所属季度结束日期
*
* @param date 指定日期
* @return 日期
*/
public static Date getNowQuarterEnd(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int month = calendar.get(Calendar.MONTH);
int quarter = month / Calendar.TUESDAY + Calendar.SUNDAY;
int endMonth = Calendar.TUESDAY;
if (quarter == Calendar.MONDAY) {
endMonth = Calendar.FRIDAY;
} else if (quarter == Calendar.TUESDAY) {
endMonth = Calendar.AM_PM;
} else if (quarter == Calendar.WEDNESDAY) {
endMonth = Calendar.MINUTE;
}
calendar.set(Calendar.MONTH, endMonth - Calendar.SUNDAY);
int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH, lastDay);
initTimeMax(calendar);
return calendar.getTime();
}
}