Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.jssolo.utils.DateTools Maven / Gradle / Ivy
package com.jssolo.utils;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* 日期/时间处理工具
* @author: zhangyan
* @version: V1.0
*/
public class DateTools {
/** 一分钟的毫秒数 60 * 1000 */
private static final long MINUTE_MS = 60000L;
/** 一小时的毫秒数 60 * 60 * 1000 */
private static final long HOUR_MS = 3600000L;
/** 一天的毫秒数 24 * 60 * 60 * 1000 */
private static final long DAY_MS = 86400000L;
/** 时间格式化格式 */
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* 分割时间方法,使用示例可访问:https://www.jssolo.com/java/9
* @author zhangyan
* @param dateType 分割类型 M/D/H/N/S 对应月/天/小时/分钟/秒
* @param begin 开始时间
* @param end 结束时间
* @param space 间隔长度
* @param isAddEnd 最后一个是否添加end参数
* @return 返回分割后的时间集合
*/
public static List splitTime(String dateType, String begin, String end, Integer space, boolean isAddEnd) {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
Date beginD = null;
Date endD = null;
try {
beginD = sdf.parse(begin);
endD = sdf.parse(end);
} catch (ParseException e) {
throw new RuntimeException(e);
}
List listDate = new ArrayList<>();
listDate.add(new SimpleDateFormat(DATE_FORMAT).format(beginD));
Calendar calBegin = Calendar.getInstance();
calBegin.setTime(beginD);
Calendar calEnd = Calendar.getInstance();
calEnd.setTime(endD);
while (calEnd.after(calBegin)) {
if ("M".equals(dateType)){
calBegin.add(Calendar.MONTH, space);
}
if ("D".equals(dateType)){
calBegin.add(Calendar.DATE, space);
}
if ("H".equals(dateType)){
calBegin.add(Calendar.HOUR, space);
}
if ("N".equals(dateType)){
calBegin.add(Calendar.MINUTE , space);
}
if ("S".equals(dateType)){
calBegin.add(Calendar.SECOND , space);
}
if (calEnd.after(calBegin)){
listDate.add(new SimpleDateFormat(DATE_FORMAT).format(calBegin.getTime()));
}
else{
if(isAddEnd){
listDate.add(new SimpleDateFormat(DATE_FORMAT).format(calEnd.getTime()));
}
}
}
return listDate;
}
/**
* 对指定日期偏移指定的天数
* @author zhangyan
* @param date 日期参数
* @param dayNum 天数的偏移量,正数为增加,负数为减去
* @return 处理后的日期
*/
public static Date dateAddDay(Date date, Integer dayNum){
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(Calendar.DATE,dayNum);
return calendar.getTime();
}
/**
* 对指定日期偏移指定的天数
* @author zhangyan
* @param date 日期参数
* @param dayNum 天数的偏移量,正数为增加,负数为减去
* @return 处理后的日期
*/
public static Date dateAddDay(Date date, Double dayNum){
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
int ms = (int) (dayNum * DAY_MS);
calendar.add(Calendar.MILLISECOND, ms);
return calendar.getTime();
}
/**
* 对指定日期偏移指定的小时
* @author zhangyan
* @param date 日期参数
* @param hour 小时的偏移量,正数为增加,负数为减去
* @return 处理后的时间
*/
public static Date dateAddHour(Date date, Integer hour){
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(Calendar.HOUR_OF_DAY,hour);
return calendar.getTime();
}
/**
* 对指定日期偏移指定的小时
* @author zhangyan
* @param date 日期参数
* @param hour 小时的偏移量,正数为增加,负数为减去
* @return 处理后的时间
*/
public static Date dateAddHour(Date date, Double hour){
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
int ms = (int) (hour * HOUR_MS);
calendar.add(Calendar.MILLISECOND, ms);
return calendar.getTime();
}
/**
* 判断时间大小,如果第一个时间大于第二个时间返回TRUE,当小于等于时返回FALSE
* @author zhangyan
* @param first 第一个时间参数
* @param last 第二个时间参数
* @return java.lang.Boolean
*/
public static Boolean firstIsBig(Date first, Date last){
return first.after(last);
}
/**
* 判断时间大小,参与判断的时间是第一个时间,与第二个时间加指定的偏移量(小时),正数为加,负数为减
* @author zhangyan
* @param first 第一个时间参数
* @param last 第二个时间参数
* @param hour 第二个时间偏移小时数
* @return 如果第一个时间大于第二个时间加偏移量返回TRUE,当小于等于时返回FALSE
*/
public static Boolean firstIsBigAddHour(Date first, Date last, Integer hour){
Date temp = dateAddHour(last,hour);
return firstIsBig(first,temp);
}
/**
* Date类型转String类型
* @author zhangyan
* @param date Date类型的时间参数
* @param format 转换格式,例如 yyyy-MM-dd HH:mm:ss
* @return 处理后的String对象
*/
public static String dateToString(Date date, String format){
SimpleDateFormat formatter = new SimpleDateFormat(format);
return formatter.format(date);
}
/**
* String类型转Date类型
* @author zhangyan
* @param dateStr String类型的时间参数
* @param format 转换格式,例如 yyyy-MM-dd HH:mm:ss
* @return 处理后的Date对象
*/
public static Date stringToDate(String dateStr, String format){
SimpleDateFormat formatter = new SimpleDateFormat(format);
try {
return formatter.parse(dateStr);
} catch (ParseException e) {
throw new RuntimeExceptionOnly("com.jssolo.utils.TimeTool.stringToDate()方法出现异常");
}
}
/**
* 计算两日期之间的分钟数
* @author zhangyan
* @param d1 日期参数
* @param d2 日期参数
* @return 两日期之间的分钟数,默认精确到两位,采用四舍五入
*/
public static BigDecimal dateDiffMinutes(Date d1, Date d2){
BigDecimal b3 = dateDiff(d1,d2, MINUTE_MS,2, BigDecimal.ROUND_HALF_UP);
return b3;
}
/**
* 计算两日期之间的分钟数
* @author zhangyan
* @param d1 日期参数
* @param d2 日期参数
* @param i 精确位数
* @return 两日期之间的分钟数,采用四舍五入
*/
public static BigDecimal dateDiffMinutes(Date d1, Date d2, int i){
BigDecimal b3 = dateDiff(d1,d2, MINUTE_MS, i, BigDecimal.ROUND_HALF_UP);
return b3;
}
/**
* 计算两日期之间的小时数
* @author zhangyan
* @param d1 日期参数
* @param d2 日期参数
* @return 两日期之间的小时差,默认精确到两位,采用四舍五入
*/
public static BigDecimal dateDiffHours(Date d1, Date d2){
BigDecimal b3 = dateDiff(d1,d2, HOUR_MS,2, BigDecimal.ROUND_HALF_UP);
return b3;
}
/**
* 计算两日期之间的小时数
* @author zhangyan
* @param d1 日期参数
* @param d2 日期参数
* @param i 精确位数
* @return 两日期之间的小时差,采用四舍五入
*/
public static BigDecimal dateDiffHours(Date d1, Date d2, int i){
BigDecimal b3 = dateDiff(d1,d2, HOUR_MS, i, BigDecimal.ROUND_HALF_UP);
return b3;
}
/**
* 计算两日期之间的天数
* @author zhangyan
* @param d1 日期参数
* @param d2 日期参数
* @return 两日期之间的天数,默认精确到两位,采用四舍五入
*/
public static BigDecimal dateDiffDays(Date d1, Date d2){
BigDecimal b3 = dateDiff(d1,d2, DAY_MS,2, BigDecimal.ROUND_HALF_UP);
return b3;
}
/**
* 计算两日期之间的天数
* @author zhangyan
* @param d1 日期参数
* @param d2 日期参数
* @param i 精确位数
* @return 两日期之间的天数,采用四舍五入
*/
public static BigDecimal dateDiffDays(Date d1, Date d2, int i){
BigDecimal b3 = dateDiff(d1,d2, DAY_MS, i, BigDecimal.ROUND_HALF_UP);
return b3;
}
private static BigDecimal dateDiff(Date d1, Date d2, long l, int i1, int i2){
BigDecimal b1 = new BigDecimal(d1.getTime() - d2.getTime()).abs();
BigDecimal b2 = new BigDecimal(l);
BigDecimal b3 = b1.divide(b2, i1, i2);
return b3;
}
}