dateUtil
关于计算相差天数,每月的第一天,每月的最后一天,每年的天数等等实际操作。
public class DateUtil {
//获取某个月有多少天
public static Integer getDayByMonth(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.getActualMaximum(Calendar.DATE);
}
//获取某年有多少天
public static Integer getDayByYear(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.getActualMaximum(Calendar.DAY_OF_YEAR);
}
/**
* 获取当前时间
*/
public static String getNowTime() {
Calendar cal = Calendar.getInstance();
SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
String lastMonth = dft.format(cal.getTime());
return lastMonth;
}
public static Date getLastMin(Date date, int i) {
try {
String str = "";
if (i < 10) {
str = " 0" + str;
} else {
str = " " + str;
}
SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
String lastMonth = dft.format(date);
lastMonth += str + ":00:00";
dft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return dft.parse(lastMonth);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 判断当天是否为本月第一天
*
* @return
*/
public static boolean isFirstDayOfMonth() {
boolean flag = false;
Calendar calendar = Calendar.getInstance();
int today = calendar.get(calendar.DAY_OF_MONTH);
if (1 == today) {
flag = true;
}
return flag;
}
/**
* 描述:获取下2个月的第一天.
*
* @return
*/
public static Date getDayOfMonth() {
//SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, 2);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
return calendar.getTime();
}
/**
* 描述:获取上个月的第一天.
*
* @return
*/
public static String getLastMaxMonthDate() {
SimpleDateFormat dft = new SimpleDateFormat("yyyyMMdd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.MONTH, -1);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
return dft.format(calendar.getTime());
}
/**
* 获取上一个月
*
* @return
*/
public static String getLastMonth() {
Calendar cal = Calendar.getInstance();
cal.add(cal.MONTH, -1);
SimpleDateFormat dft = new SimpleDateFormat("yyyyMM");
String lastMonth = dft.format(cal.getTime());
return lastMonth;
}
/**
* 描述:获取下一个月.
*
* @return
*/
public static String getPreMonth() {
Calendar cal = Calendar.getInstance();
cal.add(cal.MONTH, 1);
SimpleDateFormat dft = new SimpleDateFormat("yyyyMM");
String preMonth = dft.format(cal.getTime());
return preMonth;
}
/**
* 获取任意时间的下一个月
* 描述:<描述函数实现的功能>.
*
* @return
*/
public static String getPreMonth(String repeatDate) {
String lastMonth = "";
Calendar cal = Calendar.getInstance();
SimpleDateFormat dft = new SimpleDateFormat("yyyyMM");
int year = Integer.parseInt(repeatDate.substring(0, 4));
String monthsString = repeatDate.substring(4, 6);
int month;
if ("0".equals(monthsString.substring(0, 1))) {
month = Integer.parseInt(monthsString.substring(1, 2));
} else {
month = Integer.parseInt(monthsString.substring(0, 2));
}
cal.set(year, month, Calendar.DATE);
lastMonth = dft.format(cal.getTime());
return lastMonth;
}
/**
* * 获取指定日期下个月的第一天
*
* @return
*/
public static Date getFirstDayOfNextMonth(Date date) {
String format = "yyyy-MM-dd";
SimpleDateFormat sdf = new SimpleDateFormat(format);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.add(Calendar.MONTH, 1);
return calendar.getTime();
}
/**
* 获取任意时间的上一个月
* 描述:<描述函数实现的功能>.
*
* @return
*/
public static String getLastMonth(String repeatDate) {
String lastMonth = "";
Calendar cal = Calendar.getInstance();
SimpleDateFormat dft = new SimpleDateFormat("yyyyMM");
int year = Integer.parseInt(repeatDate.substring(0, 4));
String monthsString = repeatDate.substring(4, 6);
int month;
if ("0".equals(monthsString.substring(0, 1))) {
month = Integer.parseInt(monthsString.substring(1, 2));
} else {
month = Integer.parseInt(monthsString.substring(0, 2));
}
cal.set(year, month - 2, Calendar.DATE);
lastMonth = dft.format(cal.getTime());
return lastMonth;
}
/**
* 获取任意时间的月第一天
* 描述:<描述函数实现的功能>.
*
* @return
*/
private static String getMinMonthDate(String repeatDate) {
SimpleDateFormat dft = new SimpleDateFormat("yyyyMMdd");
Calendar calendar = Calendar.getInstance();
try {
if (StringUtils.isNotBlank(repeatDate) && !"null".equals(repeatDate)) {
calendar.setTime(dft.parse(repeatDate));
}
} catch (ParseException e) {
e.printStackTrace();
}
// calendar.add(Calendar.MONTH, -1);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
return dft.format(calendar.getTime());
}
/**
* 不论是当前时间,还是历史时间 皆是时间点的前天
* repeatDate 任意时间
*/
public static String getModify2DaysAgo(String repeatDate) {
Calendar cal = Calendar.getInstance();
String daysAgo = "";
SimpleDateFormat dft = new SimpleDateFormat("yyyyMMdd");
if (repeatDate == null || "".equals(repeatDate)) {
cal.set(Calendar.DATE, cal.get(Calendar.DATE) - 2);
} else {
int year = Integer.parseInt(repeatDate.substring(0, 4));
String monthsString = repeatDate.substring(4, 6);
int month;
if ("0".equals(monthsString.substring(0, 1))) {
month = Integer.parseInt(monthsString.substring(1, 2));
} else {
month = Integer.parseInt(monthsString.substring(0, 2));
}
String dateString = repeatDate.substring(6, 8);
int date;
if ("0".equals(dateString.subSequence(0, 1))) {
date = Integer.parseInt(dateString.substring(1, 2));
} else {
date = Integer.parseInt(dateString.substring(0, 2));
}
cal.set(year, month - 1, date - 1);
System.out.println(dft.format(cal.getTime()));
}
daysAgo = dft.format(cal.getTime());
return daysAgo;
}
/**
* 不论是当前时间,还是历史时间 皆是时间点的T-N天
* repeatDate 任意时间 param 数字 可以表示前几天
*/
public static String getModifyNumDaysAgo(String repeatDate, int param) {
Calendar cal = Calendar.getInstance();
String daysAgo = "";
SimpleDateFormat dft = new SimpleDateFormat("yyyyMMdd");
if (repeatDate == null || "".equals(repeatDate)) {
cal.set(Calendar.DATE, cal.get(Calendar.DATE) - param);
} else {
int year = Integer.parseInt(repeatDate.substring(0, 4));
String monthsString = repeatDate.substring(4, 6);
int month;
if ("0".equals(monthsString.substring(0, 1))) {
month = Integer.parseInt(monthsString.substring(1, 2));
} else {
month = Integer.parseInt(monthsString.substring(0, 2));
}
String dateString = repeatDate.substring(6, 8);
int date;
if ("0".equals(dateString.subSequence(0, 1))) {
date = Integer.parseInt(dateString.substring(1, 2));
} else {
date = Integer.parseInt(dateString.substring(0, 2));
}
cal.set(year, month - 1, date - param + 1);
System.out.println(dft.format(cal.getTime()));
}
daysAgo = dft.format(cal.getTime());
return daysAgo;
}
//比较时间大小 true 第一个大
public static boolean compare(Date date1, Date date2) {
int a = date1.compareTo(date2);
if (a >= 0) {
return true;
}
return false;
}
public static Integer getWeekOfDate(Date dt) {
String[] weekDays = {"0", "1", "2", "3", "4", "5", "6"};
Calendar cal = Calendar.getInstance();
cal.setTime(dt);
int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (w < 0)
w = 0;
return w;
}
/**
* date2比date1多的天数
*
* @return
*/
public static int differentDays(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
int day1 = cal1.get(Calendar.DAY_OF_YEAR);
int day2 = cal2.get(Calendar.DAY_OF_YEAR);
int year1 = cal1.get(Calendar.YEAR);
int year2 = cal2.get(Calendar.YEAR);
if (year1 != year2) { //同一年
int timeDistance = 0;
for (int i = year1; i < year2; i++) {
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) { //闰年
timeDistance += 366;
} else { //不是闰年
timeDistance += 365;
}
}
return timeDistance + (day2 - day1);
} else { //不同年
System.out.println("判断day2 - day1 : " + (day2 - day1));
return day2 - day1;
}
}
//获取多少天前的日期
public static Date getDateBefore(Date d, int day) {
Calendar no = Calendar.getInstance();
no.setTime(d);
no.set(Calendar.DATE, no.get(Calendar.DATE) - day);
return no.getTime();
}
/**
* 获取任意时间的月第一天
* 描述:<描述函数实现的功能>.
*
* @return
*/
public static Date getMonthFirstDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
return calendar.getTime();
}
/**
* 获取任意月份最后一天
*
* @return
* @throws ParseException
*/
public static Date getMonthEndDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return calendar.getTime();
}
public static Date getLastDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, 1);
return calendar.getTime();
}
//获取任意年的第一天
public static Date getStartYearDay(Date date) {
SimpleDateFormat dft = new SimpleDateFormat("yyyy");
String year = dft.format(date);
year += "0101";
dft = new SimpleDateFormat("yyyyMMdd");
try {
return dft.parse(year);
} catch (Exception e) {
return new Date();
}
}
//获取任意年的第一天
public static Date getEndYearDay(Date date) {
SimpleDateFormat dft = new SimpleDateFormat("yyyy");
String year = dft.format(date);
year += "1231";
dft = new SimpleDateFormat("yyyyMMdd");
try {
return dft.parse(year);
} catch (Exception e) {
return new Date();
}
}
}