工具类如下
package com.simple.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.util.Calendar;
import java.util.Date;
/**
* @author dukangping
* 对日期进行处理
* 得到开始时间和结束时间
* 例如 12:45:23 -> 00:00:00
* ->23:59:59
*/
public class FormatDateUtils {
// 五个维度
public static final Integer HOUR_FLAG = 1;
public static final Integer DAY_FLAG = 2;
public static final Integer WEEK_FLAG = 3;
public static final Integer MONTH_FLAG = 4;
public static final Integer YEAR_FLAG= 5;
// 不同格式
public static final String YEAR = "yyyy";
public static final String YEAR_MONTH = "yyyy-MM";
public static final String YEAR_MONTH_DAY = "yyyy-MM-dd";
public static final String YEAR_MONTH_DAY_HOUR = "yyyy-MM-dd hh";
public static final String YEAR_MONTH_DAY_HOUR_MIN = "yyyy-MM-dd hh:mm";
public static final String YEAR_MONTH_DAY_HOUR_MIN_SS = "yyyy-MM-dd hh:mm:ss";
/**
* 根据字符串生成开始时间
* 根据传递的格式选择
* @param dateStr 表示字符串时间日期用-隔开时间用:
*/
public static Date startDateByStr(String dateStr, String formatStr,Integer flag){
SimpleDateFormat smp = new SimpleDateFormat(formatStr);
if(HOUR_FLAG == flag){
try {
return startHour(smp.parse(dateStr));
} catch (ParseException e) {
e.printStackTrace();
System.out.println("--------日期转换异常,日期格式不对-----------");
}
}else if(DAY_FLAG == flag){
try {
return startDay(smp.parse(dateStr));
} catch (ParseException e) {
e.printStackTrace();
System.out.println("--------日期转换异常,日期格式不对-----------");
}
}else if (WEEK_FLAG == flag){
try {
return startWeek(smp.parse(dateStr));
} catch (ParseException e) {
e.printStackTrace();
System.out.println("--------日期转换异常,日期格式不对-----------");
}
}else if(MONTH_FLAG == flag){
try {
return startMonth(smp.parse(dateStr));
} catch (ParseException e) {
e.printStackTrace();
System.out.println("--------日期转换异常,日期格式不对-----------");
}
}else if(YEAR_FLAG == flag){
try {
return startYear(smp.parse(dateStr));
} catch (ParseException e) {
e.printStackTrace();
System.out.println("--------日期转换异常,日期格式不对-----------");
}
}
return null;
}
/**
* 根据字符串生成结束时间
*/
public static Date endDateByStr(String dateStr, String formatStr,Integer flag){
SimpleDateFormat smp = new SimpleDateFormat(formatStr);
if(HOUR_FLAG == flag){
try {
return endHour(smp.parse(dateStr));
} catch (ParseException e) {
e.printStackTrace();
System.out.println("--------日期转换异常,日期格式不对-----------");
}
}else if(DAY_FLAG == flag){
try {
return endDay(smp.parse(dateStr));
} catch (ParseException e) {
e.printStackTrace();
System.out.println("--------日期转换异常,日期格式不对-----------");
}
}else if (WEEK_FLAG == flag){
try {
return endWeek(smp.parse(dateStr));
} catch (ParseException e) {
e.printStackTrace();
System.out.println("--------日期转换异常,日期格式不对-----------");
}
}else if(MONTH_FLAG == flag){
try {
return endMonth(smp.parse(dateStr));
} catch (ParseException e) {
e.printStackTrace();
System.out.println("--------日期转换异常,日期格式不对-----------");
}
}else if(YEAR_FLAG == flag){
try {
return endYear(smp.parse(dateStr));
} catch (ParseException e) {
e.printStackTrace();
System.out.println("--------日期转换异常,日期格式不对-----------");
}
}
return null;
}
/**
* 获取年的最初时间
*/
public static Date startYear(Date dateParam){
Calendar c = Calendar.getInstance();
c.setTime(dateParam);
c.set(Calendar.MONTH,0);
c.set(Calendar.DAY_OF_MONTH,1);
c.set(Calendar.HOUR_OF_DAY,0);
c.set(Calendar.MINUTE,0);
c.set(Calendar.SECOND,0);
Date time = c.getTime();
return time;
}
/**
* 获取年的最后时间
*/
public static Date endYear(Date dateParam){
Calendar c = Calendar.getInstance();
c.setTime(dateParam);
c.set(Calendar.MONTH,11);
c.set(Calendar.DAY_OF_MONTH,31);
c.set(Calendar.HOUR_OF_DAY,23);
c.set(Calendar.MINUTE,59);
c.set(Calendar.SECOND,59);
Date time = c.getTime();
return time;
}
/**
* 获取月的最初时间
* @param dateParam
*/
public static Date startMonth(Date dateParam){
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar c = Calendar.getInstance();
c.setTime(dateParam);
c.add(Calendar.MONTH, 0);
c.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
c.set(Calendar.HOUR_OF_DAY,0);
c.set(Calendar.MINUTE,0);
c.set(Calendar.SECOND,0);
Date date = c.getTime();
String first = format.format(date);
return date;
}
/**
* 获取月的最后时间
* @param dateParam
* @return
*/
public static Date endMonth(Date dateParam){
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//获取当前月最后一天
Calendar ca = Calendar.getInstance();
ca.setTime(dateParam);
ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
ca.set(Calendar.HOUR_OF_DAY,23);
ca.set(Calendar.MINUTE,59);
ca.set(Calendar.SECOND,59);
Date time = ca.getTime();
return time;
}
/**
* 获取本周周一的开始日期
*/
public static Date startWeek(Date dateParam){
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateParam);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
LocalDate localDate = LocalDate.of(year,month,day);
LocalDate monday = localDate.with(TemporalAdjusters.previousOrSame( DayOfWeek.MONDAY));
int year1 = monday.getYear();
int month1 = monday.getMonthValue();
int dayOfMonth = monday.getDayOfMonth();
Calendar calendar1 = Calendar.getInstance();
calendar1.set(Calendar.YEAR,year1);
calendar1.set(Calendar.MONTH,month1-1);
calendar1.set(Calendar.DAY_OF_MONTH,dayOfMonth);
Date time = calendar1.getTime();
return startDay(time);
}
/**
* 获取本周最后一天日期
*/
public static Date endWeek(Date dateParam){
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateParam);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
LocalDate localDate = LocalDate.of(year,month,day);
LocalDate sunday = localDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY ));
int year1 = sunday.getYear();
int month1 = sunday.getMonthValue();
int dayOfMonth = sunday.getDayOfMonth();
Calendar calendar1 =Calendar.getInstance();
calendar1.set(Calendar.YEAR,year1);
calendar1.set(Calendar.MONTH,month1-1);
calendar1.set(Calendar.DAY_OF_MONTH,dayOfMonth);
return endDay(calendar1.getTime());
}
/**
* 获取天的最初时间
*/
public static Date startDay(Date dateParam) {
Calendar c = Calendar.getInstance();
c.setTime(dateParam);
c.set(Calendar.HOUR_OF_DAY,0);
c.set(Calendar.MINUTE,0);
c.set(Calendar.SECOND,0);
return c.getTime();
}
/**
* 获取天的最后时间
*/
public static Date endDay(Date dateParam){
Calendar c = Calendar.getInstance();
c.setTime(dateParam);
c.set(Calendar.HOUR_OF_DAY,23);
c.set(Calendar.MINUTE,59);
c.set(Calendar.SECOND,59);
return c.getTime();
}
/**
* 获取获取小时的开始时间
* @param dateParam
*/
public static Date startHour(Date dateParam){
Calendar c = Calendar.getInstance();
c.setTime(dateParam);
c.set(Calendar.MINUTE,0);
c.set(Calendar.SECOND,0);
Date time = c.getTime();
return time;
}
/**
*获取小时的最后时间
* @param dateParam
*/
public static Date endHour(Date dateParam){
Calendar c = Calendar.getInstance();
c.setTime(dateParam);
c.set(Calendar.MINUTE,59);
c.set(Calendar.SECOND,59);
Date time = c.getTime();
return time;
}
}