import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* @author
* @ClassName: 时间工具类
* @Description:
* @date
*/
public class TimeUtil {
/**
* @Title: getCurrentTime
* @Description: 获得当前日期 yyyy-MM-dd HH:mm:ss
* @author:w
* @Param []
* @date 2020/7/4 8:51
* @return java.lang.String 2020-08-27 14:12:40
* @throws
*/
public static String getCurrentTime() {
// 小写的hh取得12小时,大写的HH取的是24小时
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
return df.format(date);
}
/**
* @Title: getCurrentTime
* @Description: 获取系统当前时间戳
* @author:w
* @Param []
* @date 2020/7/4 8:51
* @return java.lang.String 1566889186583
* @throws
*/
public static String getSystemTime() {
String current = String.valueOf(System.currentTimeMillis());
return current;
}
/**
* @Title: getDateByString
* @Description: 获取当前日期 yy-MM-dd
* @author:w
* @Param []
* @date 2020/7/4 8:52
* @return java.lang.String 2020-08-27
* @throws
*/
public static String getDateByString() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(date);
}
/**
* @Title: getDistanceTime
* @Description: 获取两个时间相差几分钟
* @author:w
* @Param [oldTime, newTime] 2020-06-27 14:12:40, 2020-08-27 14:12:40
* @date 2020/7/4 8:53
* @return long
* @throws
*/
public static long getDistanceTime(String oldTime,String newTime){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
long NTime =df.parse(newTime).getTime();
//从对象中拿到时间
long OTime = df.parse(oldTime).getTime();
long diff=(NTime-OTime)/1000/60;
return diff;
} catch (ParseException e) {
e.printStackTrace();
return 0;
}
}
/**
* @Title: getDistanceTime
* @Description: 计算两个时间相差几天
* @author:w
* @Param [startTime, endTime] 2020-06-27 14:12:40, 2020-08-27 14:12:40
* @date 2020/7/4 9:08
* @return int
* @throws
*/
public static int getDistanceDay(Date startTime, Date endTime) {
int days = 0;
long time1 = startTime.getTime();
long time2 = endTime.getTime();
long diff;
if (time1 < time2) {
diff = time2 - time1;
} else {
diff = time1 - time2;
}
days = (int) (diff / (24 * 60 * 60 * 1000));
return days;
}
/**
* @Title: getDistanceMonth
* @Description: 计算两个时间相差几个月
* @author:w
* @Param [start, end] 2020-06-27 14:12:40, 2020-08-27 14:12:40
* @date 2020/7/4 8:55
* @return int
* @throws
*/
public static int getDistanceMonth(Date start, Date end) {
if (start.after(end)) {
Date t = start;
start = end;
end = t;
}
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(start);
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(end);
Calendar temp = Calendar.getInstance();
temp.setTime(end);
temp.add(Calendar.DATE, 1);
int year = endCalendar.get(Calendar.YEAR)
- startCalendar.get(Calendar.YEAR);
int month = endCalendar.get(Calendar.MONTH)
- startCalendar.get(Calendar.MONTH);
if ((startCalendar.get(Calendar.DATE) == 1)
&& (temp.get(Calendar.DATE) == 1)) {
return year * 12 + month + 1;
} else if ((startCalendar.get(Calendar.DATE) != 1)
&& (temp.get(Calendar.DATE) == 1)) {
return year * 12 + month;
} else if ((startCalendar.get(Calendar.DATE) == 1)
&& (temp.get(Calendar.DATE) != 1)) {
return year * 12 + month;
} else {
return (year * 12 + month - 1) < 0 ? 0 : (year * 12 + month);
}
}
/**
* @Title: getDayBeginString
* @Description: 获取该天的开始时间
* @author:w
* @Param [date] 2020-08-27 14:12:40
* @date 2020/7/4 9:19
* @return java.lang.String
* @throws
*/
public static String getDayBeginString(Date date){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date);
// 将时分秒,毫秒域清零
cal1.set(Calendar.HOUR_OF_DAY, 0);
cal1.set(Calendar.MINUTE, 0);
cal1.set(Calendar.SECOND, 0);
cal1.set(Calendar.MILLISECOND, 0);
return sdf.format(cal1.getTime());
}
/**
* @Title: getDayBeginDate
* @Description: 获取该天的开始时间
* @author:w
* @Param [date] 2020-08-27 14:12:40
* @date 2020/7/4 9:21
* @return java.util.Date
* @throws
*/
public static Date getDayBeginDate(Date date){
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date);
// 将时分秒,毫秒域清零
cal1.set(Calendar.HOUR_OF_DAY, 0);
cal1.set(Calendar.MINUTE, 0);
cal1.set(Calendar.SECOND, 0);
cal1.set(Calendar.MILLISECOND, 0);
return cal1.getTime();
}
/**
* @Title: getDayEndString
* @Description: 获取该天的结束时间
* @author:w
* @Param [date] 2020-08-27 14:12:40
* @date 2020/7/4 9:10
* @return java.lang.String
* @throws
*/
public static String getDayEndString(Date date){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date);
// 将时分秒,毫秒域清零
cal1.set(Calendar.HOUR_OF_DAY, 23);
cal1.set(Calendar.MINUTE, 59);
cal1.set(Calendar.SECOND, 59);
cal1.set(Calendar.MILLISECOND, 999);
return sdf.format(cal1.getTime());
}
/**
* @Title: getDayEndDate
* @Description: 获取该天的结束时间
* @author:w
* @Param [date] 2020-08-27 14:12:40
* @date 2020/7/4 9:13
* @return java.util.Date
* @throws
*/
public static Date getDayEndDate(Date date){
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date);
// 将时分秒,毫秒域清零
cal1.set(Calendar.HOUR_OF_DAY, 23);
cal1.set(Calendar.MINUTE, 59);
cal1.set(Calendar.SECOND, 59);
cal1.set(Calendar.MILLISECOND, 999);
return cal1.getTime();
}
/**
* @Title: getDaysByYearMonth
* @Description: 根据年、月获取当月的天数
* @author:w
* @Param [year, month] 2020,10
* @date 2020/7/4 9:25
* @return int
* @throws
*/
public static int getDaysByYearMonth(int year, int month) {
Calendar a = Calendar.getInstance();
a.set(Calendar.YEAR, year);
a.set(Calendar.MONTH, month - 1);
a.set(Calendar.DATE, 1);
a.roll(Calendar.DATE, -1);
int maxDate = a.get(Calendar.DATE);
return maxDate;
}
/**
* @Title: getDayOfWeekByDate
* @Description: 获取当前时间是星期几
* @author:w
* @Param [date] 2020-07-04 12:00:00
* @date 2020/7/4 9:28
* @return java.lang.String
* @throws
*/
public static String getDayOfWeekByDate(String date) {
String dayOfweek = "你耍我";
try {
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = myFormatter.parse(date);
SimpleDateFormat formatter = new SimpleDateFormat("E");
String str = formatter.format(myDate);
dayOfweek = str;
} catch (Exception e) {
System.out.println("该时间超出了我的想象!");
}
return dayOfweek;
}
/**
* @Title: getWeekBeginDayDate
* @Description: 获取该时间所在的周的开始时间(天)
* @author:w
* @Param [date] 2020-07-04 12:00:00
* @date 2020/7/4 9:34
* @return java.util.Date
* @throws
*/
public static Date getWeekBeginDayDate(Date date) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date);
cal1.setFirstDayOfWeek(Calendar.MONDAY);//星期一是一周的第一天
cal1.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal1.set(Calendar.HOUR_OF_DAY, 0);
cal1.set(Calendar.MINUTE, 0);
cal1.set(Calendar.SECOND, 0);
cal1.set(Calendar.MILLISECOND, 0);
return cal1.getTime();
}
/**
* @Title: getWeekBeginDayString
* @Description: 获取该时间所在的周的开始时间(天)
* @author:w
* @Param [date] 2020-07-04 12:00:00
* @date 2020/7/4 9:45
* @return java.lang.String 2020-06-29 00:00:00
* @throws
*/
public static String getWeekBeginDayString(Date date) {
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date);
cal1.setFirstDayOfWeek(Calendar.MONDAY);
cal1.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal1.set(Calendar.HOUR_OF_DAY, 0);
cal1.set(Calendar.MINUTE, 0);
cal1.set(Calendar.SECOND, 0);
cal1.set(Calendar.MILLISECOND, 0);
return myFormatter.format(cal1.getTime());
}
/**
* @Title: getWeekEndDayDate
* @Description: 获取当前时间所在周的结束时间(天)
* @author:w
* @Param [date] 2020-07-04 12:00:00
* @date 2020/7/4 9:48
* @return java.util.Date
* @throws
*/
public static Date getWeekEndDayDate(Date date) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date);
cal1.setFirstDayOfWeek(Calendar.SUNDAY);
cal1.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
cal1.set(Calendar.HOUR_OF_DAY, 23);
cal1.set(Calendar.MINUTE, 59);
cal1.set(Calendar.SECOND, 59);
cal1.set(Calendar.MILLISECOND, 999);
return cal1.getTime();
}
/**
* @Title: getWeekEndDayString
* @Description: 获取当前时间所在周的结束时间(天)
* @author:w
* @Param [date] 2020-07-04 12:00:00
* @date 2020/7/4 10:27
* @return java.lang.String
* @throws
*/
public static String getWeekEndDayString(Date date) {
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date);
cal1.setFirstDayOfWeek(Calendar.SUNDAY);
cal1.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
cal1.set(Calendar.HOUR_OF_DAY, 23);
cal1.set(Calendar.MINUTE, 59);
cal1.set(Calendar.SECOND, 59);
cal1.set(Calendar.MILLISECOND, 999);
return myFormatter.format(cal1.getTime());
}
/**
* @Title: getBetweenDays
* @Description: 获取两个时间区间中的具体日期(天)
* @author:w
* @Param [startTime, endTime] 2020-07-04 12:00:00, 2020-07-09 12:00:00
* @date 2020/7/4 10:28
* @return java.util.List<java.lang.String>
* @throws
*/
public static List<String> getBetweenDays(String startTime, String endTime) {
// 返回的日期集合
List<String> days = new ArrayList<String>();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date start = dateFormat.parse(startTime);
Date end = dateFormat.parse(endTime);
Calendar tempStart = Calendar.getInstance();
tempStart.setTime(start);
Calendar tempEnd = Calendar.getInstance();
tempEnd.setTime(end);
tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)
while (tempStart.before(tempEnd)) {
days.add(dateFormat.format(tempStart.getTime()));
tempStart.add(Calendar.DAY_OF_YEAR, 1);
}
} catch (ParseException e) {
e.printStackTrace();
}
return days;
}
/**
* @Title: getStartDayOfWeekNo
* @Description: 通过年和该年的第几周获取本周的开始时间
* @author:w
* @Param [year, weekNo] 2020,27
* @date 2020/7/4 10:36
* @return java.lang.String 2020-06-29
* @throws
*/
public static String getStartDayOfWeekNo(int year, int weekNo) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.YEAR, year);
cal.set(Calendar.WEEK_OF_YEAR, weekNo);
return dateFormat.format(dateFormat.parse(cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" +
cal.get(Calendar.DAY_OF_MONTH)));
} catch (ParseException e) {
e.printStackTrace();
return "1970-01-01";
}
}
/**
* @Title: getEndDayOfWeekNo
* @Description: 通过年和该年的第几周获取本周的结束时间
* @author:w
* @Param [year, weekNo] 2020, 27
* @date 2020/7/4 10:40
* @return java.lang.String 2020-07-05
* @throws
*/
public static String getEndDayOfWeekNo(int year, int weekNo) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.set(Calendar.YEAR, year);
cal.set(Calendar.WEEK_OF_YEAR, weekNo);
cal.add(Calendar.DAY_OF_WEEK, 6);
return dateFormat.format(dateFormat.parse(cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH) + 1) + "-" +
cal.get(Calendar.DAY_OF_MONTH)));
} catch (ParseException e) {
e.printStackTrace();
return "1970-01-01";
}
}
/**
* @Title: getCompareMax
* @Description: 日期比较获取较大日期
* @author:w
* @Param [beginDate, endDate]
* @date 2020/7/4 10:56
* @return java.util.Date
* @throws
*/
public static Date getCompareMax(Date beginDate, Date endDate) {
if(beginDate==null) {
return endDate;
}
if(endDate==null) {
return beginDate;
}
if(beginDate.after(endDate)) {//beginDate日期大于endDate
return beginDate;
}
return endDate;
}
/**
* @Title: getCompareMin
* @Description: 日期比较获取较小日期
* @author:w
* @Param [beginDate, endDate]
* @date 2020/7/4 11:01
* @return java.util.Date
* @throws
*/
public static Date getCompareMin(Date beginDate, Date endDate) {
if(beginDate==null) {
return endDate;
}
if(endDate==null) {
return beginDate;
}
if(beginDate.after(endDate)) {
return endDate;
}
return beginDate;
}
/**
* @Title: dateFormat
* @Description: 时间格式转换(date 转 String)
* @author:w
* @Param [date]
* @date 2020/7/4 11:11
* @return java.lang.String
* @throws
*/
public static String dateFormat(Date date) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(date);
return dateString;
}
/**
* @Title: StringToDate
* @Description: 时间格式转换(String 转 date)
* @author:w
* @Param [str]
* @date 2020/7/4 11:13
* @return java.util.Date
* @throws
*/
public static Date StringToDate(String str) throws ParseException{
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = formatter.parse(str);
return date;
}
/**
* @Title: isEffectiveDate
* @Description: 判断某时间是否在一个区间内
* @author:w
* @Param [startDate, endDate, time] 开始时间、结束时间、某时间
* @date 2020/7/4 11:17
* @return boolean true表示在区间内
* @throws
*/
public static boolean isEffectiveDate(Date startDate, Date endDate, Date time ){
if(startDate == null || endDate == null){
return false;
}
long currentTime = time.getTime();
if(currentTime >= startDate.getTime()
&& currentTime <= endDate.getTime()){
return true;
}
return false;
}
/**
* @Title: localDateTime2Date
* @Description: 将 LocalDateTime 类型的时间转 Date
* @author:w
* @Param [localDateTime] 时间
* @date 2020/7/4 11:17
* @return Date格式的时间
* @throws
*/
public static Date localDateTime2Date(LocalDateTime localDateTime){
return Date.from( localDateTime.atZone( ZoneId.systemDefault()).toInstant());;
}
/**
* @Title: date2LocalDateTime
* @Description: 将 Date 类型的时间转 LocalDateTime
* @author:w
* @Param [date] 时间
* @date 2020/7/4 11:17
* @return LocalDateTime 格式的时间
* @throws
*/
public static LocalDateTime date2LocalDateTime(Date date){
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
}
public static void main(String[] args) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
System.out.println(getWeekBeginDayString(new Date()));
System.out.println(getBetweenDays("2020-07-04 12:00:00", "2020-07-09 12:00:00"));
System.out.println(getStartDayOfWeekNo(2020, 27));
System.out.println(getEndDayOfWeekNo(2020, 27));
System.out.println(getCompareMax(dateFormat.parse("2020-07-04 12:00:00"), dateFormat.parse("2020-07-12 12:00:00")));
System.out.println(isEffectiveDate(dateFormat.parse("2020-07-04 12:00:00"), dateFormat.parse("2020-07-12 12:00:00")
, dateFormat.parse("2020-07-05 12:00:00")));
} catch (ParseException e) {
e.printStackTrace();
}
}
/**
* 比较时间区间是否冲突
* @param leftStartDate 开始时间
* @param leftEndDate 结束时间
* @return
*/
public static boolean estimateTimeConflict(Date leftStartDate, Date leftEndDate){
//要比较区间的开始时间
Date rightStartDate = entity.getStartTime();
//要比较区间的结束时间
Date rightEndDate = entity.getEndTime();
if (((leftStartDate.getTime() >= rightStartDate.getTime())
&& leftStartDate.getTime() < rightEndDate.getTime())
|| ((leftStartDate.getTime() > rightStartDate.getTime())
&& leftStartDate.getTime() <= rightEndDate.getTime())
|| ((rightStartDate.getTime() >= leftStartDate.getTime())
&& rightStartDate.getTime() < leftEndDate.getTime())
|| ((rightStartDate.getTime() > leftStartDate.getTime())
&& rightStartDate.getTime() <= leftEndDate.getTime())) {
System.out.println("存在时间交集");
return true;
}
return false;
}
/**
* 将String类型的Date转为ISO8601格式
* @param timestamp 时间
* @return
*/
public String getISO8601TimestampFromDateStr(String timestamp){
java.time.format.DateTimeFormatter dtf1 = java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt = LocalDateTime.parse(timestamp,dtf1);
ZoneOffset offset = ZoneOffset.of("+08:00");
OffsetDateTime date = OffsetDateTime.of(ldt ,offset);
java.time.format.DateTimeFormatter dtf2 = java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
return date.format(dtf2 );
}
/**
* 时间格式转换
* 当前以EEE MMM dd HH:mm:ss zzz yyyy 格式转 yyyy-MM-dd HH:mm:ss 格式
* @param date EEE MMM dd HH:mm:ss zzz yyyy 格式的时间
* @return
*/
public String getTime(String date){
String time = null;
try {
Date formDate = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US).parse(date);
time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA).format(formDate);
} catch (ParseException e) {
e.printStackTrace();
}
return time;
}
}
转载请注明原文地址:https://ipadbbs.8miu.com/read-58203.html