package org.jeecg.modules.eam.util;
|
|
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.text.DecimalFormat;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.time.DayOfWeek;
|
import java.time.LocalDate;
|
import java.time.ZoneId;
|
import java.time.temporal.ChronoField;
|
import java.time.temporal.ChronoUnit;
|
import java.util.*;
|
import java.util.regex.Pattern;
|
import java.util.stream.Collectors;
|
import java.util.stream.Stream;
|
|
public class DateUtils {
|
|
private final static long DAYTIMESUNSET = 86400;
|
|
/**
|
* @return 得到明天
|
*/
|
public static Date getNextDay(Date d1) {
|
long d2 = d1.getTime() + 86400 * 1000;
|
return new Date(d2);
|
}
|
|
/**
|
* @return 得到昨天
|
*/
|
public static Date getPreviousDay(Date d1) {
|
long d2 = d1.getTime() - 86400 * 1000;
|
return new Date(d2);
|
}
|
|
/**
|
* @return 返回时间差的语言描述 如1天2小时5分6秒
|
*/
|
public static String different(Date d1, Date d2) {
|
if (d1 == null || d2 == null) {
|
return "";
|
}
|
StringBuilder strB = new StringBuilder();
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
try {
|
//毫秒ms
|
long diff = d2.getTime() - d1.getTime();
|
long diffSeconds = diff / 1000 % 60;
|
long diffMinutes = diff / (60 * 1000) % 60;
|
long diffHours = diff / (60 * 60 * 1000) % 24;
|
long diffDays = diff / (24 * 60 * 60 * 1000);
|
if (diffDays > 0) {
|
strB.append(diffDays + " 天 ");
|
strB.append(diffHours + " 小时 ");
|
strB.append(diffMinutes + " 分钟 ");
|
strB.append(diffSeconds + " 秒 ");
|
} else if (diffHours > 0) {
|
strB.append(diffHours + " 小时 ");
|
strB.append(diffMinutes + " 分钟 ");
|
strB.append(diffSeconds + " 秒 ");
|
} else if (diffMinutes > 0) {
|
strB.append(diffMinutes + " 分钟 ");
|
strB.append(diffSeconds + " 秒 ");
|
} else {
|
strB.append(diffSeconds + " 秒 ");
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return strB.toString();
|
}
|
|
/**
|
* @return 获取两个date的时间差,结果为秒 除
|
*/
|
public static long differentSecond(Date startDate, Date endDate) {
|
return new BigDecimal(endDate.getTime() - startDate.getTime()).divide(new BigDecimal("1000"), 0, BigDecimal.ROUND_HALF_UP).longValue();
|
// return (endDate.getTime() - startDate.getTime()) / 1000;
|
}
|
|
/**
|
* @return 获取两个date的时间差,结果为分钟
|
*/
|
public static Integer differentMinutes(Date startDate, Date endDate) {
|
return new BigDecimal(endDate.getTime() - startDate.getTime()).divide(new BigDecimal("60000"), 0, RoundingMode.HALF_UP).intValue();
|
}
|
|
/**
|
* @return 返回传入时间的0点0分0秒
|
*/
|
public static Date getTodayZero(Date d) {
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(d);
|
cal.set(Calendar.HOUR_OF_DAY, 0);
|
cal.set(Calendar.MINUTE, 0);
|
cal.set(Calendar.SECOND, 0);
|
return cal.getTime();
|
}
|
|
/**
|
* @return 返回传入时间的0点0分0秒
|
*/
|
public static Date getTomorrowZero(Date d) {
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(d);
|
cal.set(Calendar.HOUR_OF_DAY, 0);
|
cal.set(Calendar.MINUTE, 0);
|
cal.set(Calendar.SECOND, 0);
|
cal.add(Calendar.DAY_OF_MONTH, 1);
|
return cal.getTime();
|
}
|
|
/**
|
* @return 判断时间是否是当天
|
*/
|
public static boolean isTaday(Date date) {
|
Date now = new Date();
|
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
|
String nowDay = sf.format(now);
|
String day = sf.format(date);
|
return day.equals(nowDay);
|
}
|
|
/**
|
* @return 判断两个时间是否为同一天
|
*/
|
public static boolean isOneDay(Date d1, Date d2) {
|
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
|
String d1Str = sf.format(d1);
|
String d2Str = sf.format(d2);
|
return d1Str.equals(d2Str);
|
}
|
|
/**
|
* @return 判断两个时间是否为同一年
|
*/
|
public static boolean isOneYear(Date d1, Date d2) {
|
SimpleDateFormat sf = new SimpleDateFormat("yyyy");
|
String d1Str = sf.format(d1);
|
String d2Str = sf.format(d2);
|
return d1Str.equals(d2Str);
|
}
|
|
public static String dateProportion(Date start, Date end) {
|
float differentSecond = DateUtils.differentSecond(start, end);
|
float f = differentSecond / DAYTIMESUNSET * 100;
|
return String.format("%.2f", f) + "%";
|
}
|
|
public static Date strToDate(String dateStr, String format) {
|
SimpleDateFormat sf = new SimpleDateFormat(format);
|
Date result = null;
|
try {
|
result = sf.parse(dateStr);
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
return result;
|
}
|
|
public static final String STR_DATE = "yyyy-MM-dd";
|
public static final String STRDATE = "yyyyMMdd";
|
public static final String STR_YEAR_MONTH = "yyyy-MM";
|
public static final String STRYEARMONTH = "yyyyMM";
|
public static final String STR_DATE_TIME = "yyyy-MM-dd HH:mm:ss.SSS";
|
public static final String STR_DATE_TIME_SMALL = "yyyy-MM-dd HH:mm:ss";
|
public static final String STR_DATE_TIME_MIN = "yyyy-MM-dd HH:mm";
|
public static final String STR_DATE_TIME_HOUR = "yyyy-MM-dd HH";
|
public static final String STR_DATE_TIME_FULL = "yyyyMMddHHmmssSSS";
|
public static final String STR_HHMMSS = "HH:mm:ss";
|
public static final String STR_HHMM = "HH:mm";
|
public static final String STR_MMDD = "MM-dd";
|
|
/**
|
* <p>
|
* Description: 实际投标月份
|
* </p>
|
*
|
* @param startDate
|
* @param endDate
|
* @return obj [0] 实际投标月份 例如实际投标月份(3.86)意义是3个月又26天 obj[1] 实际取整月份 (3)
|
*/
|
public static Integer getRealMonth(Date startDate, Date endDate) {
|
Integer month = 0;
|
Calendar start = Calendar.getInstance();
|
start.setTime(startDate);
|
|
Calendar end = Calendar.getInstance();
|
end.setTime(endDate);
|
int year = start.get(Calendar.YEAR);
|
int year2 = end.get(Calendar.YEAR);
|
int month2 = start.get(Calendar.MONTH);
|
int month3 = end.get(Calendar.MONTH);
|
try {
|
while (start.before(end)) {
|
start.add(Calendar.MONTH, 1);
|
month++;
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
int day2 = start.get(Calendar.DAY_OF_MONTH);
|
int day3 = end.get(Calendar.DAY_OF_MONTH);
|
int tmpYear = year2 - year;
|
if (day2 == day3) {
|
return (tmpYear * 12) + (month3 - month2);
|
}
|
return month == 0 ? month : (month - 1);
|
}
|
|
public static Date getNow() {
|
return new Date(System.currentTimeMillis());
|
}
|
|
public static int getDayOfMonth() {
|
Calendar aCalendar = Calendar.getInstance(Locale.CHINA);
|
int day = aCalendar.getActualMaximum(Calendar.DATE);
|
return day;
|
}
|
|
/**
|
* <p>
|
* Description: 修改时间为指定时间当天的23:59:59.000
|
* </p>
|
*
|
* @param date 需要修改的时间
|
* @return 修改后的时间
|
*/
|
public static Date fillTime(Date date) {
|
Date result = removeTime(date);
|
result.setTime(result.getTime() + 24 * 60 * 60 * 1000 - 1000); // 加一天
|
return result;
|
}
|
|
/**
|
* @param date 当前时间
|
* @param i 往前几天
|
* @return
|
*/
|
public static Date fillBeforeTime(Date date, Integer i) {
|
Date result = removeTime(date);
|
Calendar calendar = Calendar.getInstance(); // 得到日历
|
calendar.setTime(result);// 把当前时间赋给日历
|
calendar.add(Calendar.DAY_OF_MONTH, i); // 设置为前一天
|
result.setTime(calendar.getTime().getTime() + 24 * 60 * 60 * 1000
|
- 1000); // 加一天
|
return result;
|
}
|
|
/**
|
* <p>
|
* Description: 修改时间为指定时间前一天的00:00:00
|
* </p>
|
*
|
* @param date 需要修改的时间
|
* @return 修改后的时间
|
*/
|
public static Date plusTime(Date date, Integer i) {
|
Date result = removeTime(date);
|
Calendar calendar = Calendar.getInstance(); // 得到日历
|
calendar.setTime(result);// 把当前时间赋给日历
|
calendar.add(Calendar.DAY_OF_MONTH, i); // 设置为前一天
|
return calendar.getTime();
|
}
|
|
/**
|
* <p>
|
* Description: 去掉日期时间中的时间部分
|
* </p>
|
* 如: 2013-11-11 18:56:33 ---> 2013-11-11 00:00:00
|
*
|
* @param date 需要修改的时间
|
* @return 修改后的时间
|
*/
|
public static Date removeTime(Date date) {
|
Date result = null;
|
try {
|
SimpleDateFormat df = new SimpleDateFormat(STR_DATE);
|
String dateStr = df.format(date);
|
result = df.parse(dateStr);
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
return result;
|
}
|
|
/**
|
* <p>
|
* Description: 按默认格式(yyyy-MM-dd HH:mm:ss.SSS)获取时间字符串
|
* </p>
|
*
|
* @param date 要转换的日期
|
* @return 转换后的时间字符串
|
*/
|
public static String format(Date date) {
|
SimpleDateFormat df = new SimpleDateFormat(STR_DATE_TIME);
|
return df.format(date);
|
}
|
|
public static Date parseDate(Date date, String format) {
|
SimpleDateFormat df = new SimpleDateFormat(format);
|
try {
|
date = df.parse(df.format(date));
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
return date;
|
}
|
|
public static Date getDelayedYear() {
|
Calendar curr = Calendar.getInstance();
|
curr.set(Calendar.YEAR, curr.get(Calendar.YEAR) + 1);
|
Date date = curr.getTime();
|
return date;
|
}
|
|
/**
|
* <p>
|
* Description: 按指定格式获取时间字符串
|
* </p>
|
*
|
* @param date 要转换的日期
|
* @param format 格式,例如:yyyy-MM-dd HH:mm:ss.SSS
|
* @return 转换后的时间字符串
|
*/
|
public static String format(Date date, String format) {
|
SimpleDateFormat df = new SimpleDateFormat(format);
|
return df.format(date);
|
}
|
|
/**
|
* <p>
|
* Description: 加月函数
|
* </p>
|
*
|
* @param month 月份数
|
* @return
|
*/
|
public static Date addMonth(Integer month, Date time) {
|
Calendar c = Calendar.getInstance();
|
c.setTime(time);
|
c.add(Calendar.MONTH, month);
|
return c.getTime();
|
}
|
|
public static Boolean greater(Date startTime, Date endTime) {
|
return startTime.getTime() > endTime.getTime();
|
}
|
|
public static Boolean less(Date startTime, Date endTime) {
|
return startTime.getTime() < endTime.getTime();
|
}
|
|
public static Boolean equals(Date startTime, Date endTime) {
|
return startTime.getTime() == endTime.getTime();
|
}
|
|
public static Integer getDiffMonth(Calendar c, Calendar c1) {
|
return (c.get(Calendar.YEAR) - c1.get(Calendar.YEAR)) * 12
|
+ (c.get(Calendar.MONTH) - c1.get(Calendar.MONTH));
|
}
|
|
/**
|
* 是否为同一天
|
*/
|
public static boolean equalsDay(Date a, Date b) {
|
return removeTime(a).getTime() == removeTime(b).getTime();
|
}
|
|
public static Integer getDays(Date startTime, Date endTime) {
|
Calendar c = Calendar.getInstance();
|
c.setTime(startTime);
|
Calendar c1 = Calendar.getInstance();
|
c1.setTime(endTime);
|
long t1 = c.getTimeInMillis();
|
long t2 = c1.getTimeInMillis();
|
// 计算天数
|
Long days = (t2 - t1) / (24 * 60 * 60 * 1000);
|
return days.intValue();
|
}
|
|
public static Integer getSeconds(Date startTime, Date endTime) {
|
try {
|
Calendar c = Calendar.getInstance();
|
c.setTime(startTime);
|
Calendar c1 = Calendar.getInstance();
|
c1.setTime(endTime);
|
long t1 = c.getTimeInMillis();
|
long t2 = c1.getTimeInMillis();
|
// 计算秒数
|
Long days = (t2 - t1) / (1000);
|
return days.intValue();
|
} catch (Exception e) {
|
return 0;
|
}
|
|
}
|
|
//获取小时差
|
public static double subHours(Date startTime, Date endTime) {
|
Calendar c = Calendar.getInstance();
|
c.setTime(startTime);
|
Calendar c1 = Calendar.getInstance();
|
c1.setTime(endTime);
|
double t1 = c.getTimeInMillis();
|
double t2 = c1.getTimeInMillis();
|
// 计算天数
|
double hours = (t2 - t1) / (1000 * 60 * 60);
|
return Double.valueOf(new DecimalFormat("#.00").format(hours));
|
}
|
|
//根据当前时间和出生日期获取年龄
|
public static int getAge(Date birthDay) {
|
Calendar cal = Calendar.getInstance();
|
// 取出系统当前时间的年、月、日部分
|
int yearNow = cal.get(Calendar.YEAR);
|
int monthNow = cal.get(Calendar.MONTH);
|
int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
|
cal.setTime(birthDay);
|
// 取出出生日期的年、月、日部分
|
int yearBirth = cal.get(Calendar.YEAR);
|
int monthBirth = cal.get(Calendar.MONTH);
|
int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
|
// 当前年份与出生年份相减,初步计算年龄
|
int age = yearNow - yearBirth;
|
// 当前月份与出生日期的月份相比,如果月份小于出生月份,则年龄上减1,表示不满多少周岁
|
if (monthNow <= monthBirth) {
|
// 如果月份相等,在比较日期,如果当前日,小于出生日,也减1,表示不满多少周岁
|
if (monthNow == monthBirth) {
|
if (dayOfMonthNow < dayOfMonthBirth) {
|
age--;
|
}
|
} else {
|
age--;
|
}
|
|
}
|
return age;
|
}
|
|
public static Date subDays(Date startTime, Integer day) {
|
Calendar c = Calendar.getInstance();
|
c.setTime(startTime);
|
c.add(Calendar.DATE, day * -1);
|
return c.getTime();
|
}
|
|
public static Date addDays(Date startTime, Integer day) {
|
Calendar c = Calendar.getInstance();
|
c.setTime(startTime);
|
c.add(Calendar.DATE, day);
|
return c.getTime();
|
}
|
/*public static Date addHours(Date startTime, Integer hours) {
|
Calendar c = Calendar.getInstance();
|
c.setTime(startTime);
|
c.add(Calendar.HOUR, hours );
|
return c.getTime();
|
}*/
|
|
public static Date toDate(String date, String format) {
|
SimpleDateFormat df = new SimpleDateFormat(format);
|
try {
|
return df.parse(date);
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
public static Date toDateFull(String date) {
|
SimpleDateFormat df = new SimpleDateFormat(STR_DATE_TIME);
|
try {
|
return df.parse(date);
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
return null;
|
}
|
|
public static Date toDateMedium(String date) {
|
SimpleDateFormat df = new SimpleDateFormat(STR_DATE_TIME_SMALL);
|
try {
|
Date dd = df.parse(date);
|
return dd;
|
} catch (ParseException e) {
|
return null;
|
}
|
}
|
|
public static Integer getDate(Date date) {
|
if (date != null) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
int day = calendar.get(Calendar.DATE);
|
return day;
|
}
|
return null;
|
}
|
|
public static Integer getYear() {
|
return getYear(new Date());
|
}
|
|
public static Integer getYear(Date date) {
|
if (date != null) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
int year = calendar.get(Calendar.YEAR);
|
return year;
|
}
|
return null;
|
}
|
|
public static Integer getMonth() {
|
return getMonth(new Date());
|
}
|
|
public static Integer getMonth(Date date) {
|
if (date != null) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
int month = calendar.get(Calendar.MONTH);
|
return month + 1;
|
}
|
return null;
|
}
|
|
public static Integer getDay() {
|
return getDay(new Date());
|
}
|
|
public static Integer getDay(Date date) {
|
if (date != null) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
int day = calendar.get(Calendar.DAY_OF_MONTH);
|
return day;
|
}
|
return null;
|
}
|
|
|
public static Date[] getMonthStartTimeAndEndTime(Integer month) {
|
Calendar calendar = Calendar.getInstance();
|
Date[] dates = new Date[2];
|
Date startTime = null;
|
Date endsTime = null;
|
if (month != null) {
|
calendar.set(Calendar.MONTH, month);
|
//获得到本月的第一天
|
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
|
startTime = calendar.getTime();
|
startTime = DateUtils.removeTime(startTime);
|
//获得到本月的最后一天
|
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
endsTime = calendar.getTime();
|
endsTime = DateUtils.fillTime(endsTime);
|
}
|
dates[0] = startTime;
|
dates[1] = endsTime;
|
return dates;
|
}
|
|
public static Date[] getMonthStartTimeAndEndTime(Date date) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
Integer month = calendar.get(Calendar.MONTH);
|
Date[] dates = new Date[2];
|
Date startTime = null;
|
Date endsTime = null;
|
if (month != null) {
|
calendar.set(Calendar.MONTH, month);
|
//获得到本月的第一天
|
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
|
startTime = calendar.getTime();
|
startTime = DateUtils.removeTime(startTime);
|
//获得到本月的最后一天
|
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
|
endsTime = calendar.getTime();
|
endsTime = DateUtils.fillTime(endsTime);
|
}
|
dates[0] = startTime;
|
dates[1] = endsTime;
|
return dates;
|
}
|
|
/**
|
* 获取days天的时间区间,endTime 为当天的后一天0点,
|
* startTime 为endTime前days天
|
*
|
* @param days
|
* @return
|
*/
|
public static Date[] getDaysStartTimeAndEndTime(Integer days) {
|
Date[] dates = new Date[2];
|
Date endDate = plusTime(removeTime(getNow()), 1);
|
Date startDate = subDays(endDate, days);
|
dates[0] = startDate;
|
dates[1] = endDate;
|
return dates;
|
}
|
|
/**
|
* 根据某一年获取最后一天的时间
|
* 2013 ---> 2013-12-31 23:59:59.000
|
*
|
* @param year
|
* @return
|
*/
|
public static Date getYearEndDay(Integer year) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.clear();
|
calendar.set(Calendar.YEAR, year);
|
calendar.roll(Calendar.DAY_OF_YEAR, -1);
|
Date yearLast = calendar.getTime();
|
Date lastYear = DateUtils.fillTime(yearLast);
|
return lastYear;
|
}
|
|
/**
|
* 获取start/end的所有日期字符串 格式yyyy-MM-dd
|
*
|
* @param start
|
* @param end
|
* @return
|
*/
|
public static List<String> getDatesStringList(Date start, Date end, String strDate) {
|
List<String> list = new ArrayList<>();
|
int i = getDays(start, end);
|
for (int j = 0; j <= i; j++) {
|
if (j == 0) {
|
list.add(format(start, strDate));
|
} else {
|
list.add(format(plusTime(start, j), strDate));
|
}
|
}
|
return list;
|
}
|
|
/**
|
* 获取start/end的所有日期字符串 格式yyyy-MM-dd
|
*
|
* @param start
|
* @param end
|
* @return
|
*/
|
public static List<String> getDatesStringList(Date start, Date end) {
|
List<String> list = new ArrayList<>();
|
int i = getDays(start, end);
|
for (int j = 0; j <= i; j++) {
|
if (j == 0) {
|
list.add(format(start, STR_DATE));
|
} else {
|
list.add(format(plusTime(start, j), STR_DATE));
|
}
|
}
|
return list;
|
}
|
|
/**
|
* 获取start/end的所有日期字符串 格式yyyyMMdd
|
*
|
* @param start
|
* @param end
|
* @return
|
*/
|
public static List<String> getDatesStringList2(Date start, Date end) {
|
List<String> list = new ArrayList<>();
|
int i = getDays(start, end);
|
for (int j = 0; j <= i; j++) {
|
if (j == 0) {
|
list.add(format(start, STRDATE));
|
} else {
|
list.add(format(plusTime(start, j), STRDATE));
|
}
|
}
|
return list;
|
}
|
|
/**
|
* 获取start/end的所有日期字符串 格式MM-dd
|
*
|
* @param start
|
* @param end
|
* @return
|
*/
|
public static List<String> getDatesStringLists(Date start, Date end) {
|
List<String> list = new ArrayList<>();
|
int i = getDays(start, end);
|
for (int j = 0; j <= i; j++) {
|
if (j == 0) {
|
list.add(format(start, STR_MMDD));
|
} else {
|
list.add(format(plusTime(start, j), STR_MMDD));
|
}
|
}
|
return list;
|
}
|
|
public static List<String> getMonthBetween(Date start, Date end) {
|
List<String> list = new ArrayList<>();
|
Calendar min = Calendar.getInstance();
|
Calendar max = Calendar.getInstance();
|
min.setTime(start);
|
min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);
|
max.setTime(end);
|
max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);
|
Calendar curr = min;
|
while (curr.before(max)) {
|
list.add(format(curr.getTime(), STR_YEAR_MONTH));
|
curr.add(Calendar.MONTH, 1);
|
}
|
return list;
|
}
|
|
/**
|
* 获取dateStr的日期格式yyyy-MM-dd
|
*
|
* @param dateStr
|
* @return
|
*/
|
public static Date getShortDate(String dateStr) {
|
SimpleDateFormat sdf = new SimpleDateFormat(STR_DATE);
|
Date startTime = null;
|
try {
|
startTime = sdf.parse(dateStr);
|
} catch (ParseException e) {
|
}
|
return startTime == null ? removeTime(new Date()) : startTime;
|
}
|
|
/**
|
* 获取dateStr的日期格式yyyyMMdd
|
*
|
* @param dateStr
|
* @return
|
*/
|
public static Date getShortDate2(String dateStr) {
|
SimpleDateFormat sdf = new SimpleDateFormat(STRDATE);
|
Date startTime = null;
|
try {
|
startTime = sdf.parse(dateStr);
|
} catch (ParseException e) {
|
}
|
return startTime == null ? removeTime(new Date()) : startTime;
|
}
|
|
public static Date getFormatDate(String dateStr, String format) {
|
SimpleDateFormat sdf = new SimpleDateFormat(format);
|
Date startTime = null;
|
try {
|
startTime = sdf.parse(dateStr);
|
} catch (ParseException e) {
|
}
|
return startTime == null ? removeTime(new Date()) : startTime;
|
}
|
|
/**
|
* @param time
|
* @param n
|
* @return 在一个时间上加秒
|
*/
|
public static Date addSecond(Date time, Integer n) {
|
Calendar c = Calendar.getInstance();
|
c.setTime(time);
|
c.add(Calendar.SECOND, n);
|
return c.getTime();
|
}
|
|
/**
|
* @param time
|
* @param n
|
* @return 在一个时间上加分钟
|
*/
|
public static Date addMinute(Date time, Integer n) {
|
Calendar c = Calendar.getInstance();
|
c.setTime(time);
|
c.add(Calendar.MINUTE, n);
|
return c.getTime();
|
}
|
|
/**
|
* @param time
|
* @param n
|
* @return 在一个时间上加小时
|
*/
|
public static Date addHour(Date time, Integer n) {
|
Calendar c = Calendar.getInstance();
|
c.setTime(time);
|
c.add(Calendar.HOUR_OF_DAY, n);
|
return c.getTime();
|
}
|
|
/**
|
* 获取start/end的所有日期字符串 格式yyyy-MM-dd
|
*
|
* @param start
|
* @param end
|
* @return
|
*/
|
public static List<String> getDateMonth(String start, String end) {
|
List<String> list = new ArrayList<>();
|
SimpleDateFormat yyyyMM = new SimpleDateFormat("yyyy-MM");
|
Date startyear = null;
|
try {
|
startyear = yyyyMM.parse(start);
|
Date endyear = yyyyMM.parse(end);
|
Calendar dd = Calendar.getInstance();//定义日期实例
|
dd.setTime(startyear);//设置日期起始时间
|
while (dd.getTime().before(endyear)) {//判断是否到结束日期
|
String str = yyyyMM.format(dd.getTime());
|
dd.add(Calendar.MONTH, 1);//进行当前日期月份加1
|
list.add(str);
|
}
|
list.add(yyyyMM.format(endyear));
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
return list;
|
}
|
|
/**
|
* 获取start/end的所有日期字符串 格式yyyy
|
*
|
* @param start
|
* @param end
|
* @return
|
*/
|
public static List<String> getDateYear(String start, String end) {
|
List<String> list = new ArrayList<>();
|
SimpleDateFormat yyyy = new SimpleDateFormat("yyyy");
|
Date startyear = null;
|
try {
|
startyear = yyyy.parse(start);
|
Date endyear = yyyy.parse(end);
|
Calendar dd = Calendar.getInstance();//定义日期实例
|
dd.setTime(startyear);//设置日期起始时间
|
while (dd.getTime().before(endyear)) {//判断是否到结束日期
|
String str = yyyy.format(dd.getTime());
|
dd.add(Calendar.YEAR, 1);//进行当前日期月份加1
|
list.add(str);
|
}
|
list.add(yyyy.format(endyear));
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
return list;
|
}
|
|
/**
|
* 获取当前时间 定位到小时
|
* 格式为 yyyy-MM-dd hh:mm
|
* 例:2018-02-27 11:00
|
*
|
* @return
|
*/
|
public static Date getNowHourDate() {
|
Date now = getNow();
|
Date result;
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(now);
|
int hour = calendar.get(Calendar.HOUR_OF_DAY);
|
String dateStr = format(now, STR_DATE);
|
dateStr = dateStr + " " + (hour < 10 ? "0" + hour : hour) + ":00";
|
result = toDate(dateStr, STR_DATE_TIME_MIN);
|
return result;
|
}
|
|
/**
|
* 获取每日8:11或11:11的时间点
|
*
|
* @return
|
*/
|
public static Date getNowHourDateTo() {
|
Date now = getNow();
|
Date result;
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(now);
|
int hour = calendar.get(Calendar.HOUR_OF_DAY);
|
if (hour != 8 && hour != 11) {
|
return null;
|
}
|
int minute = calendar.get(Calendar.MINUTE);
|
if (minute < 11) {
|
return null;
|
}
|
String dateStr = format(now, STR_DATE);
|
dateStr = dateStr + " " + (hour < 10 ? "0" + hour : hour) + ":11";
|
result = toDate(dateStr, STR_DATE_TIME_MIN);
|
return result;
|
}
|
|
/**
|
* 获取每日8:00、13:00、20:00的时间点
|
*
|
* @return
|
*/
|
public static List<Date> getHourDateList(Date time) {
|
List<Date> result = new ArrayList<>();
|
result.add(addHour(time, 8));
|
result.add(addHour(time, 13));
|
result.add(addHour(time, 20));
|
return result;
|
}
|
|
/**
|
* 获取上月的最后一天
|
*
|
* @return
|
*/
|
public static Date getPreviousMonthLastDay() {
|
Calendar calendar = Calendar.getInstance();
|
calendar.set(Calendar.DAY_OF_MONTH, 0);
|
return DateUtils.removeTime(calendar.getTime());
|
}
|
|
/**
|
* 获取end时间月的第一天
|
*
|
* @param end 月份最后一天
|
* @return
|
*/
|
public static Date getTheMonthFirstDay(Date end) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(end);
|
calendar.set(Calendar.DAY_OF_MONTH, 1);
|
return calendar.getTime();
|
}
|
|
public static String secToTimeHour(int time) {
|
String timeStr = null;
|
int hour = 0;
|
if (time <= 0) {
|
return "0小时";
|
} else {
|
BigDecimal bigDecimal = new BigDecimal(time);
|
BigDecimal bigDecimal1 = new BigDecimal(3600);
|
BigDecimal hourBigDecimal = new BigDecimal(0);
|
hourBigDecimal = new BigDecimal(String.valueOf(bigDecimal)).
|
divide(new BigDecimal(String.valueOf(bigDecimal1)), 2, BigDecimal.ROUND_HALF_UP);
|
timeStr = hourBigDecimal + "小时";
|
}
|
return timeStr;
|
}
|
|
public static String secToTime(int time) {
|
String timeStr = null;
|
int hour = 0;
|
int minute = 0;
|
int second = 0;
|
if (time <= 0)
|
return " ";
|
else {
|
minute = time / 60;
|
if (minute < 60) {
|
second = time % 60;
|
timeStr = unitFormat(minute) + "分" + unitFormat(second) + " 秒";
|
} else {
|
hour = minute / 60;
|
minute = minute % 60;
|
second = time - hour * 3600 - minute * 60;
|
timeStr = unitFormat(hour) + "小时" + unitFormat(minute) + "分" + unitFormat(second) + "秒";
|
}
|
}
|
return timeStr;
|
}
|
|
public static String unitFormat(int i) {
|
String retStr = null;
|
if (i >= 0 && i < 10)
|
retStr = "0" + Integer.toString(i);
|
else
|
retStr = "" + i;
|
return retStr;
|
}
|
|
/**
|
* 验证时间
|
*
|
* @param time 时间字符串 HH:mm
|
* @return 验证成功返回true,验证失败返回false
|
*/
|
public static boolean checkTime(String time) {
|
String regex = "([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$";
|
return Pattern.matches(regex, time);
|
}
|
|
/**
|
* 获取每日07:30:00的时间点
|
* 格式为 yyyy-MM-dd HH:mm:ss
|
* 例:2018-05-28 07:30:00
|
*
|
* @return
|
*/
|
public static Date getHourDateTo(Date now, String time) {
|
String dateStr = format(now, STR_DATE);
|
dateStr = dateStr + " " + time;
|
Date result = toDate(dateStr, STR_DATE_TIME_SMALL);
|
return result;
|
}
|
|
public static Date setTimeForDay(Date theDate, String planTime) {
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(theDate);
|
String[] times = planTime.split(":");
|
cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(times[0]));
|
cal.set(Calendar.MINUTE, Integer.parseInt(times[1]));
|
cal.set(Calendar.SECOND, Integer.parseInt(times[2]));
|
return cal.getTime();
|
}
|
|
public static long getTimeWithOutDay(Date d) {
|
return d.getTime() / 1000 % 86400;
|
}
|
|
/**
|
* @param lo 毫秒数
|
* @return String yyyy-MM-dd HH:mm:ss
|
* @Description: long类型转换成日期
|
*/
|
public static String longToDate(long lo) {
|
Date date = new Date(lo);
|
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
return sd.format(date);
|
}
|
|
/**
|
* @param startDate
|
* @param endDate
|
* @return
|
*/
|
public static List<Date> getWeekDays(LocalDate startDate, LocalDate endDate) {
|
List<Date> result = new ArrayList<>();
|
List<LocalDate> dateList = Stream.iterate(startDate, localDate -> localDate.plusDays(1))
|
.limit(ChronoUnit.DAYS.between(startDate, endDate) + 1)
|
.filter(localDate -> DayOfWeek.SATURDAY.equals(DayOfWeek.of(localDate.get(ChronoField.DAY_OF_WEEK))) || DayOfWeek.SUNDAY.equals(DayOfWeek.of(localDate.get(ChronoField.DAY_OF_WEEK))))
|
.collect(Collectors.toList());
|
dateList.forEach(localDate -> result.add(Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant())));
|
return result;
|
}
|
|
/**
|
* @param smallDate
|
* @param bigDate
|
* @desc 获取两个日期之间的天数
|
*/
|
public static Integer getDaysBetween(String smallDate, String bigDate) throws ParseException {
|
// 日期格式
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
// 获取两个日期的时间戳
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(sdf.parse(smallDate));
|
long smallTime = cal.getTimeInMillis();
|
cal.setTime(sdf.parse(bigDate));
|
long bigTime = cal.getTimeInMillis();
|
// 相差的日期
|
long days = (bigTime - smallTime) / (1000 * 3600 * 24);
|
// long转int 存在溢出情况 根据业务情况编辑catch中返回值
|
try {
|
return Integer.parseInt(String.valueOf(days));
|
} catch (NumberFormatException e) {
|
e.printStackTrace();
|
return 0;
|
}
|
}
|
|
/**
|
* 日期转换,将接口返回的20180524转为2018-05-24
|
*
|
* @param str
|
* @return
|
*/
|
public static String dateConvertion(String str) {
|
Date parse = null;
|
String dateString = "";
|
try {
|
parse = new SimpleDateFormat("yyyyMMdd").parse(str);
|
dateString = new SimpleDateFormat("yyyy-MM-dd").format(parse);
|
} catch (ParseException e) {
|
dateString = null;
|
}
|
|
return dateString;
|
}
|
}
|