package com.yssh.utils;
|
|
import java.lang.management.ManagementFactory;
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
import com.yssh.config.InitConfig;
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
|
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
|
public static String YYYY = "yyyy";
|
|
public static String YYYY_MM = "yyyy-MM";
|
|
public static String YYYY_MM_DD = "yyyy-MM-dd";
|
|
public static String YYYYMM = "yyyyMM";
|
|
public static String YYYYMMDD = "yyyyMMdd";
|
|
public static String YYYYMMDDHH = "yyyyMMddHH";
|
|
public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
|
|
public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
|
|
public static String YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";
|
|
public static String YYYY_MM_DD_HH = "yyyy-MM-dd HH";
|
|
private static String[] parsePatterns = {"yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM",
|
"yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss",
|
"yyyy.MM.dd HH:mm", "yyyy.MM"};
|
|
|
public static String getDate() {
|
return dateTimeNow(YYYY_MM_DD);
|
}
|
|
public static final String getTime() {
|
return dateTimeNow(YYYY_MM_DD_HH_MM_SS);
|
}
|
|
public static final String dateTimeNow() {
|
return dateTimeNow(YYYYMMDDHHMMSS);
|
}
|
|
public static final String dateTimeNow(final String format) {
|
return parseDateToStr(format, InitConfig.getDate());
|
}
|
|
public static final String dateTime(final Date date) {
|
return parseDateToStr(YYYY_MM_DD, date);
|
}
|
|
public static final String parseDateToStr(final String format, final Date date) {
|
return new SimpleDateFormat(format).format(date);
|
}
|
|
public static final Date dateTime(final String format, final String ts) {
|
try {
|
return new SimpleDateFormat(format).parse(ts);
|
} catch (ParseException e) {
|
throw new RuntimeException(e);
|
}
|
}
|
|
public static String getYyyyMm(Date date) {
|
return new SimpleDateFormat(YYYYMM).format(date);
|
}
|
|
public static String getYyyyMmDd(Date date) {
|
return new SimpleDateFormat(YYYYMMDD).format(date);
|
}
|
|
public static String getYyyyMmDdHh(Date date) {
|
return new SimpleDateFormat(YYYYMMDDHH).format(date);
|
}
|
|
public static String getYyyyMmDdHhMmSs(Date date) {
|
return new SimpleDateFormat(YYYY_MM_DD_HH_MM_SS).format(date);
|
}
|
|
/**
|
* 日期路径 即年/月/日 如2018/08/08
|
*/
|
public static final String datePath() {
|
return DateFormatUtils.format(InitConfig.getDate(), "yyyy/MM/dd");
|
}
|
|
/**
|
* 日期路径 即年/月/日 如20180808
|
*/
|
public static final String dateTime() {
|
return DateFormatUtils.format(InitConfig.getDate(), "yyyyMMdd");
|
}
|
|
/**
|
* 日期型字符串转化为日期 格式
|
*/
|
public static Date parseDate(Object str) {
|
if (str == null) {
|
return null;
|
}
|
try {
|
return parseDate(str.toString(), parsePatterns);
|
} catch (ParseException e) {
|
return null;
|
}
|
}
|
|
/**
|
* 获取服务器启动时间
|
*/
|
public static Date getServerStartDate() {
|
long time = ManagementFactory.getRuntimeMXBean().getStartTime();
|
return new Date(time);
|
}
|
|
/**
|
* 计算两个时间差
|
*/
|
public static String getDatePoor(Date endDate, Date nowDate) {
|
long nd = 1000 * 24 * 60 * 60;
|
long nh = 1000 * 60 * 60;
|
long nm = 1000 * 60;
|
// long ns = 1000;
|
// 获得两个时间的毫秒时间差异
|
long diff = endDate.getTime() - nowDate.getTime();
|
// 计算差多少天
|
long day = diff / nd;
|
// 计算差多少小时
|
long hour = diff % nd / nh;
|
// 计算差多少分钟
|
long min = diff % nd % nh / nm;
|
// 计算差多少秒//输出结果
|
// long sec = diff % nd % nh % nm / ns;
|
return day + "天" + hour + "小时" + min + "分钟";
|
}
|
|
/**
|
* @throws
|
* @Title: differHour
|
* @Description: 获取两个时间差几个小时
|
* @param: @param endDate
|
* @param: @param nowDate
|
* @param: @return
|
* @return: long
|
*/
|
public static int differDay(Date startDate, Date endDate) {
|
long nd = 1000 * 24 * 60 * 60;
|
long diff = endDate.getTime() - startDate.getTime();
|
double dd = Double.valueOf(String.valueOf(diff)) / nd;
|
// 计算差多少天
|
return Double.valueOf(Math.ceil(dd)).intValue();
|
}
|
|
/**
|
* @Description: 获取一段时间间隔
|
* @param:date 需要操作的时间对象
|
* @param:day 操作的时间间隔
|
* 正数为之后一段时间
|
* 负数为之前一段时间
|
* @param:dateType 操作的时间时分秒天选择
|
* 常用有:
|
* Calendar.MINUTE 分
|
* Calendar.HOUR_OF_DAY 时
|
* Calendar.DATE 天
|
* Calendar.MONTH 月
|
*/
|
public static Date getAPeriodOfTime(Date date, int day, int dateType) {
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTime(date);
|
calendar.add(dateType, day);
|
return calendar.getTime();
|
}
|
|
public static List<String> get3Hours() {
|
List<String> times = new ArrayList<>();
|
SimpleDateFormat ymdh = new SimpleDateFormat(YYYYMMDDHH);
|
|
Calendar calendar = Calendar.getInstance();
|
calendar.add(Calendar.HOUR_OF_DAY, 1);
|
|
for (int i = 0; i < 3; i++) {
|
calendar.add(Calendar.HOUR_OF_DAY, -1);
|
String time = ymdh.format(calendar.getTime());
|
// times.add(time);
|
times.add(0, time);
|
}
|
|
return times;
|
}
|
|
public static Map<Date, Date> segmentationDateByTimeQuantum(Date startDate, Date endDate, int timeQuantum, int dateType) {
|
LinkedHashMap<Date, Date> result = new LinkedHashMap<Date, Date>();
|
long startTimeMillisecond = startDate.getTime();
|
long endTimeMillisecond = endDate.getTime();
|
Long quantumTimeMillisecond = 0L;
|
switch (dateType) {
|
case Calendar.DATE:
|
quantumTimeMillisecond = new Integer(1000 * 60 * 60 * 24 * timeQuantum).longValue();
|
break;
|
case Calendar.HOUR_OF_DAY:
|
quantumTimeMillisecond = new Integer(1000 * 60 * 60 * timeQuantum).longValue();
|
break;
|
case Calendar.MINUTE:
|
quantumTimeMillisecond = new Integer(1000 * 60 * timeQuantum).longValue();
|
break;
|
default:
|
break;
|
}
|
for (long time = startTimeMillisecond; time < endTimeMillisecond; time += quantumTimeMillisecond) {
|
Date beginDate = new Date(time);
|
Date finishDate = new Date(time + quantumTimeMillisecond);
|
if (finishDate.getTime() > endTimeMillisecond) {
|
finishDate = endDate;
|
}
|
result.put(beginDate, finishDate);
|
}
|
return result;
|
}
|
|
/**
|
* 剪除日期的时间部分
|
*/
|
public static Date trimTime(Date date) {
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(date);
|
|
return dateTime(YYYY_MM_DD_HH_MM_SS, parseDateToStr(YYYY_MM_DD, cal.getTime()) + " 00:00:00");
|
}
|
|
/**
|
* 去年
|
*/
|
public static Date lastYear(Date date) {
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(date);
|
cal.add(Calendar.YEAR, -1);
|
|
return cal.getTime();
|
}
|
|
/**
|
* 获取一年中的第几周
|
*/
|
public static int getWeekOfYear(Date date) {
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(date);
|
|
return cal.get(Calendar.WEEK_OF_YEAR);
|
}
|
|
/**
|
* 获取一年中的第几周的星期一
|
*/
|
public static Date getWeekOfYearForMon(int year, int weekOfYear) {
|
Calendar cal = Calendar.getInstance();
|
cal.set(Calendar.YEAR, year);
|
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
|
cal.set(Calendar.WEEK_OF_YEAR, weekOfYear);
|
|
return cal.getTime();
|
}
|
|
/**
|
* 获取一年中的第几周的星期日
|
*/
|
public static Date getWeekOfYearForSun(int year, int weekOfYear) {
|
Calendar cal = Calendar.getInstance();
|
cal.set(Calendar.YEAR, year);
|
cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
|
cal.set(Calendar.WEEK_OF_YEAR, weekOfYear);
|
|
return cal.getTime();
|
}
|
|
/**
|
* 获取本月第一天
|
**/
|
public static Date getMonthStart(Date date) {
|
Calendar cal = Calendar.getInstance();
|
// cal.set(Calendar.MONTH, 3)
|
cal.setTime(date);
|
cal.set(Calendar.DAY_OF_MONTH, 1);
|
return dateTime(YYYY_MM_DD_HH_MM_SS, parseDateToStr(YYYY_MM_DD, cal.getTime()) + " 00:00:00");
|
}
|
|
/**
|
* 获取本月最后一天
|
**/
|
public static Date getMonthEnd(Date date) {
|
Calendar cal = Calendar.getInstance();
|
// cal.set(Calendar.MONTH, 3)
|
cal.setTime(date);
|
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
|
return dateTime(YYYY_MM_DD_HH_MM_SS, parseDateToStr(YYYY_MM_DD, cal.getTime()) + " 23:59:59");
|
}
|
}
|