package org.yeshi.utils;
|
|
import java.text.ParseException;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.List;
|
|
import org.yeshi.utils.entity.DateInfo;
|
|
public class DateUtil {
|
|
public static String dateDiff(String startTime, String endTime) {
|
|
String datatime = 0 + "天" + 0 + "小时" + 0 + "分钟";
|
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
|
|
try {
|
long nm = 1000 * 60;// 一分钟的毫秒数
|
long nh = 1000 * 60 * 60;// 一小时的毫秒数
|
long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
|
|
// 获得两个时间的毫秒时间差异
|
long diff = sd.parse(endTime).getTime() - sd.parse(startTime).getTime();
|
|
long day = diff / nd;// 计算差多少天
|
long hour = diff % nd / nh;// 计算差多少小时
|
long min = diff % nd % nh / nm;// 计算差多少分钟
|
|
datatime = day + "天" + hour + "小时" + min + "分钟";
|
|
} catch (ParseException e) {
|
e.printStackTrace();
|
}
|
|
return datatime;
|
}
|
|
public static String dateDiff2(Date startTime, Date endTime) throws Exception {
|
|
String datatime = "0分";
|
|
long nm = 1000 * 60;// 一分钟的毫秒数
|
long nh = 1000 * 60 * 60;// 一小时的毫秒数
|
long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
|
|
// 获得两个时间的毫秒时间差异
|
long diff = endTime.getTime() - startTime.getTime();
|
long day = diff / nd;// 计算差多少天
|
long hour = diff % nd / nh;// 计算差多少小时
|
long min = diff % nd % nh / nm;// 计算差多少分钟
|
|
if (day > 0) {
|
datatime = day + "天" + hour + "时" + min + "分";
|
} else {
|
if (hour > 0) {
|
datatime = hour + "时" + min + "分";
|
} else {
|
if (min < 0)
|
min = 0;
|
datatime = min + "分";
|
}
|
}
|
return datatime;
|
}
|
|
public static DateInfo dateDiff3(long startTime, long endTime) throws Exception {
|
long nm = 1000 * 60;// 一分钟的毫秒数
|
long nh = 1000 * 60 * 60;// 一小时的毫秒数
|
long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
|
|
// 获得两个时间的毫秒时间差异
|
long diff = endTime - startTime;
|
|
int day = (int) (diff / nd);// 计算差多少天
|
long hour = diff % nd / nh;// 计算差多少小时
|
long minute = diff % nd % nh / nm;// 计算差多少分钟
|
long second = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60); // 计算差多少秒
|
|
DateInfo dateInfo = new DateInfo();
|
dateInfo.setDay(day);
|
dateInfo.setHour(hour);
|
dateInfo.setMinute(minute);
|
dateInfo.setSecond(second);
|
return dateInfo;
|
}
|
|
public static String dateDiff4(Date startTime, Date endTime) throws Exception {
|
|
String datatime = "0分";
|
|
long nm = 1000 * 60;// 一分钟的毫秒数
|
long nh = 1000 * 60 * 60;// 一小时的毫秒数
|
long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
|
|
// 获得两个时间的毫秒时间差异
|
long diff = endTime.getTime() - startTime.getTime();
|
long day = diff / nd;// 计算差多少天
|
long hour = diff % nd / nh;// 计算差多少小时
|
long min = diff % nd % nh / nm;// 计算差多少分钟
|
|
if (day > 0) {
|
datatime = day + "天";
|
} else {
|
if (hour > 0) {
|
datatime = hour + "时";
|
} else {
|
if (min < 0)
|
min = 0;
|
datatime = min + "分";
|
}
|
}
|
return datatime;
|
}
|
|
public static String dateDiff5(Date startTime, Date endTime) throws Exception {
|
long nm = 1000 * 60;// 一分钟的毫秒数
|
long nh = 1000 * 60 * 60;// 一小时的毫秒数
|
long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
|
|
// 获得两个时间的毫秒时间差异
|
long diff = endTime.getTime() - startTime.getTime();
|
long day = diff / nd;// 计算差多少天
|
long hour = diff % nd / nh;// 计算差多少小时
|
long min = diff % nd % nh / nm;// 计算差多少分钟
|
long second = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60); // 计算差多少秒
|
|
String datatime = "";
|
if (day > 0) {
|
datatime = day + "天";
|
} else if (hour > 0) {
|
datatime = hour + "小时";
|
} else if (min > 0) {
|
datatime = min + "分钟";
|
} else if (second > 0) {
|
datatime = second + "秒";
|
}
|
return datatime;
|
}
|
|
public static long dateDiffMin(Date startTime, Date endTime) throws Exception {
|
long nm = 1000 * 60;// 一分钟的毫秒数
|
long nh = 1000 * 60 * 60;// 一小时的毫秒数
|
long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
|
|
// 获得两个时间的毫秒时间差异
|
long diff = endTime.getTime() - startTime.getTime();
|
long day = diff / nd;// 计算差多少天
|
long hour = diff % nd / nh;// 计算差多少小时
|
long min = diff % nd % nh / nm + day * 24 * 60 + hour * 60;// 计算差多少分钟
|
return min;
|
}
|
|
/**
|
* 通过时间秒毫秒数判断两个时间的间隔
|
*
|
* @param date1
|
* @param date2
|
* @return
|
*/
|
public static int differentDaysByMillisecond(Date start, Date end) {
|
return (int) ((end.getTime() - start.getTime()) / (1000 * 3600 * 24));
|
}
|
|
public String transferLongToDate(String dateFormat, Long millSec) {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
Date date = new Date(millSec);
|
return sdf.format(date);
|
}
|
|
/**
|
* 验证是否属于同一天
|
*
|
* @param date1
|
* @param date2
|
* @return
|
*/
|
public static boolean isSameDay(Date date1, Date date2) {
|
if (date1 != null && date2 != null) {
|
Calendar cal1 = Calendar.getInstance();
|
cal1.setTime(date1);
|
Calendar cal2 = Calendar.getInstance();
|
cal2.setTime(date2);
|
return isSameDay(cal1, cal2);
|
} else {
|
return false;
|
}
|
}
|
|
/**
|
* 验证是否属于同一天
|
*
|
* @param cal1
|
* @param cal2
|
* @return
|
*/
|
public static boolean isSameDay(Calendar cal1, Calendar cal2) {
|
if (cal1 != null && cal2 != null) {
|
return cal1.get(0) == cal2.get(0) && cal1.get(1) == cal2.get(1) && cal1.get(6) == cal2.get(6);
|
} else {
|
return false;
|
}
|
}
|
|
/**
|
* 判断是否同一个月
|
*
|
* @param date1
|
* @param date2
|
* @return
|
*/
|
public static boolean isSameMonth(Date date1, Date date2) {
|
Calendar calendar1 = Calendar.getInstance();
|
calendar1.setTime(date1);
|
Calendar calendar2 = Calendar.getInstance();
|
calendar2.setTime(date2);
|
int year1 = calendar1.get(Calendar.YEAR);
|
int year2 = calendar2.get(Calendar.YEAR);
|
int month1 = calendar1.get(Calendar.MONTH);
|
int month2 = calendar2.get(Calendar.MONTH);
|
System.out.println(year1 + " " + month1);
|
System.out.println(year2 + " " + month2);
|
return calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR)
|
&& calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH);
|
}
|
|
/**
|
* 指定日期加上天数后的日期
|
*
|
* @param num 增加的天数
|
* @param nowDate 创建时间
|
* @return
|
* @throws ParseException
|
*/
|
public static String plusDay(int num, String nowDate) throws ParseException {
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
Date currdate = format.parse(nowDate);
|
|
Calendar ca = Calendar.getInstance();
|
ca.setTime(currdate);
|
ca.add(Calendar.DATE, num);
|
|
return format.format(ca.getTime());
|
}
|
|
/**
|
* 指定日期加上天数后的日期
|
*
|
* @param num 增加的天数
|
* @param nowDate 创建时间
|
* @return
|
* @throws ParseException
|
*/
|
public static Date plusDayReturnDate(int num, String nowDate) throws ParseException {
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
Date currdate = format.parse(nowDate);
|
Calendar ca = Calendar.getInstance();
|
ca.setTime(currdate);
|
ca.add(Calendar.DATE, num);
|
return ca.getTime();
|
}
|
|
/**
|
* 指定日期加上天数后的日期
|
*
|
* @param num 增加的天数
|
* @param nowDate 创建时间
|
* @return
|
* @throws ParseException
|
*/
|
public static String plusDay(int num, Date currdate) throws ParseException {
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
|
Calendar ca = Calendar.getInstance();
|
ca.setTime(currdate);
|
ca.add(Calendar.DATE, num);
|
|
return format.format(ca.getTime());
|
}
|
|
/**
|
* 指定日期加上天数后的日期
|
*
|
* @param num 增加的天数
|
* @param nowDate 创建时间
|
* @return
|
* @throws ParseException
|
*/
|
public static Date plusDayDate(int num, Date currdate) {
|
Calendar ca = Calendar.getInstance();
|
ca.setTime(currdate);
|
ca.add(Calendar.DATE, num);
|
return ca.getTime();
|
}
|
|
/**
|
* 加上月份
|
*
|
* @param currdate
|
* @param num
|
* @return
|
*/
|
public static Date plusMonths(Date currdate, int num) {
|
Calendar ca = Calendar.getInstance();
|
ca.setTime(currdate);
|
ca.add(Calendar.MONTH, num);
|
return ca.getTime();
|
}
|
|
/**
|
* 加上年份
|
*
|
* @param currdate
|
* @param num
|
* @return
|
*/
|
public static Date plusYears(Date currdate, int num) {
|
Calendar ca = Calendar.getInstance();
|
ca.setTime(currdate);
|
ca.add(Calendar.YEAR, num);
|
return ca.getTime();
|
}
|
|
/**
|
* 减去月份
|
*
|
* @param currdate
|
* @param num
|
* @return
|
*/
|
public static Date reduceMonth(Date currdate, int num) {
|
Calendar ca = Calendar.getInstance();
|
ca.setTime(currdate);
|
ca.add(Calendar.MONTH, -num);
|
return ca.getTime();
|
}
|
|
public static Date reduceDay(Date currdate, int num) {
|
Calendar ca = Calendar.getInstance();
|
ca.setTime(currdate);
|
ca.add(Calendar.DATE, -num);
|
return ca.getTime();
|
}
|
|
/**
|
* 指定日期减去天数后的日期
|
*
|
* @param num 减去的天数
|
* @param nowDate 创建时间
|
* @return
|
* @throws ParseException
|
*/
|
public static String reduceDay(int num, String nowDate) throws ParseException {
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
Date currdate = format.parse(nowDate);
|
|
Calendar ca = Calendar.getInstance();
|
ca.setTime(currdate);
|
ca.add(Calendar.DATE, -num); // 日期减 如果不够减会将月变动
|
|
return format.format(ca.getTime());
|
}
|
|
/**
|
* 指定日期减去天数后的日期
|
*
|
* @param num 减去的天数
|
* @param nowDate 创建时间
|
* @return
|
* @throws ParseException
|
*/
|
public static String reduceDay2(int num, Date date) throws ParseException {
|
// 设置要获取到什么样的时间
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
// 获取String类型的时间
|
String date_str = format.format(date);
|
Date currdate = format.parse(date_str);
|
|
Calendar ca = Calendar.getInstance();
|
ca.setTime(currdate);
|
ca.add(Calendar.DATE, -num); // 日期减 如果不够减会将月变动
|
|
return format.format(ca.getTime());
|
}
|
|
/**
|
* 指定日期减去天数后的日期
|
*
|
* @param num 减去的天数
|
* @param nowDate 创建时间
|
* @return
|
* @throws ParseException
|
*/
|
public static Date reduceDay(int num, Date date) throws ParseException {
|
// 设置要获取到什么样的时间
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
// 获取String类型的时间
|
String date_str = format.format(date);
|
Date currdate = format.parse(date_str);
|
|
Calendar ca = Calendar.getInstance();
|
ca.setTime(currdate);
|
ca.add(Calendar.DATE, -num); // 日期减 如果不够减会将月变动
|
|
return ca.getTime();
|
}
|
|
/**
|
* 指定日期减去天数后的日期
|
*
|
* @param num 减去的天数
|
* @param nowDate 创建时间
|
* @return
|
* @throws ParseException
|
*/
|
public static String reduceDayTostring(int num, Date date) throws ParseException {
|
// 设置要获取到什么样的时间
|
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
// 获取String类型的时间
|
String date_str = format.format(date);
|
Date currdate = format.parse(date_str);
|
|
Calendar ca = Calendar.getInstance();
|
ca.setTime(currdate);
|
ca.add(Calendar.DATE, -num); // 日期减 如果不够减会将月变动
|
return format.format(ca.getTime());
|
}
|
|
/**
|
* 计算两个日期之间相差的天数
|
*
|
* @param smdate 较小的时间
|
* @param bdate 较大的时间
|
* @return 相差天数
|
* @throws ParseException calendar 对日期进行时间操作 getTimeInMillis() 获取日期的毫秒显示形式
|
*/
|
public static int daysBetween(Date minDate, Date maxDate) throws ParseException {
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(minDate);
|
long minTime = cal.getTimeInMillis();
|
cal.setTime(maxDate);
|
long maxTime = cal.getTimeInMillis();
|
long between_days = (maxTime - minTime) / (1000 * 3600 * 24);
|
return Integer.parseInt(String.valueOf(between_days));
|
}
|
|
/**
|
* 字符串日期格式的计算
|
*
|
* @param smdate
|
* @param bdate
|
* @return 单位天数
|
* @throws ParseException
|
*/
|
public static int daysBetween2(Date minDate, Date maxDate) throws ParseException {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
return daysBetween(sdf.format(minDate), sdf.format(maxDate));
|
}
|
|
/**
|
* 字符串日期格式的计算
|
*
|
* @param smdate
|
* @param bdate
|
* @return
|
* @throws ParseException
|
*/
|
public static int daysBetween(String minDate, String maxDate) throws ParseException {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
Calendar cal = Calendar.getInstance();
|
cal.setTime(sdf.parse(minDate));
|
long minTime = cal.getTimeInMillis();
|
cal.setTime(sdf.parse(maxDate));
|
long maxTime = cal.getTimeInMillis();
|
long between_days = (maxTime - minTime) / (1000 * 3600 * 24);
|
return Integer.parseInt(String.valueOf(between_days));
|
}
|
|
/**
|
* 返回中间日期
|
*
|
* @param startTime
|
* @param endTime
|
* @return
|
* @throws Exception
|
*/
|
public static List<String> dayFactory(String startTime, String endTime) throws Exception {
|
|
List<String> listDate = new ArrayList<String>();
|
|
String plusDay = "";
|
for (int i = 0; i < 1000; i++) {
|
if (i == 0) {
|
plusDay = startTime;
|
} else {
|
plusDay = DateUtil.plusDay(i, startTime);
|
}
|
|
listDate.add(plusDay);
|
|
if (plusDay.equals(endTime)) {
|
break; // 时间结束
|
}
|
}
|
return listDate;
|
}
|
|
/**
|
* 随机减去几分钟
|
*
|
* @param date
|
* @param min 随机添加的分钟数
|
* @return
|
*/
|
public static Date reduceRandomMinute(Date date, int min) {
|
long rand = (long) (Math.random() * 1000 * 60 * min);
|
long time = date.getTime() - rand;
|
return new Date(time);
|
}
|
|
/**
|
* 计算两时间月差
|
*
|
* @param startDate <String>
|
* @param endDate <String>
|
* @return int
|
* @throws ParseException
|
*/
|
public static int getMonthSpace(String startDate, String endDate) throws ParseException {
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
|
return getMonthSpace(sdf.parse(startDate), sdf.parse(endDate));
|
}
|
|
/**
|
* 计算两时间月差
|
*
|
* @param startDate <String>
|
* @param endDate <String>
|
* @return int
|
* @throws ParseException
|
*/
|
public static int getMonthSpace(Date startDate, Date endDate) {
|
Calendar start = Calendar.getInstance();
|
Calendar end = Calendar.getInstance();
|
start.setTime(startDate);
|
end.setTime(endDate);
|
int result = end.get(Calendar.MONTH) - start.get(Calendar.MONTH);
|
int month = (end.get(Calendar.YEAR) - start.get(Calendar.YEAR)) * 12;
|
return Math.abs(month + result);
|
}
|
|
public static Date getTodayStartTime() {
|
Calendar todayStart = Calendar.getInstance();
|
todayStart.set(Calendar.HOUR_OF_DAY, 0);
|
todayStart.set(Calendar.MINUTE, 0);
|
todayStart.set(Calendar.SECOND, 0);
|
todayStart.set(Calendar.MILLISECOND, 0);
|
return todayStart.getTime();
|
}
|
|
public static Date getTodayEndTime() {
|
Calendar todayEnd = Calendar.getInstance();
|
todayEnd.set(Calendar.HOUR_OF_DAY, 23);
|
todayEnd.set(Calendar.MINUTE, 59);
|
todayEnd.set(Calendar.SECOND, 59);
|
todayEnd.set(Calendar.MILLISECOND, 999);
|
return todayEnd.getTime();
|
}
|
|
/**
|
* 获取指定年月的第一天
|
*
|
* @param yearMonth
|
* @return
|
*/
|
public static String getFirstDayOfMonth(String yearMonth) {
|
int year = Integer.parseInt(yearMonth.split("-")[0]); // 年
|
int month = Integer.parseInt(yearMonth.split("-")[1]); // 月
|
return getFirstDayOfMonth(year, month);
|
}
|
|
/**
|
* 获取指定年月的第一天
|
*
|
* @param year
|
* @param month
|
* @return
|
*/
|
public static String getFirstDayOfMonth(int year, int month) {
|
Calendar cal = Calendar.getInstance();
|
// 设置年份
|
cal.set(Calendar.YEAR, year);
|
// 设置月份
|
cal.set(Calendar.MONTH, month - 1);
|
// 获取某月最小天数
|
int firstDay = cal.getMinimum(Calendar.DATE);
|
// 设置日历中月份的最小天数
|
cal.set(Calendar.DAY_OF_MONTH, firstDay);
|
// 格式化日期
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
return sdf.format(cal.getTime());
|
}
|
|
/**
|
* 获取指定年月的最后一天
|
*
|
* @param yearMonth
|
* @return
|
*/
|
public static String getLastDayOfMonth(String yearMonth) {
|
int year = Integer.parseInt(yearMonth.split("-")[0]); // 年
|
int month = Integer.parseInt(yearMonth.split("-")[1]); // 月
|
return getLastDayOfMonth(year, month);
|
}
|
|
/**
|
* 获取指定年月的最后一天
|
*
|
* @param year
|
* @param month
|
* @return
|
*/
|
public static String getLastDayOfMonth(int year, int month) {
|
Calendar cal = Calendar.getInstance();
|
// 设置年份
|
cal.set(Calendar.YEAR, year);
|
// 设置月份
|
cal.set(Calendar.MONTH, month - 1);
|
// 获取某月最大天数
|
int lastDay = cal.getActualMaximum(Calendar.DATE);
|
// 设置日历中月份的最大天数
|
cal.set(Calendar.DAY_OF_MONTH, lastDay);
|
// 格式化日期
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
return sdf.format(cal.getTime());
|
}
|
|
public static void main(String[] args) throws ParseException {
|
System.out.println(getMonthSpace("2012-02", "2012-02"));
|
}
|
|
}
|