import com.tax.cloud.core.exception.DateException;
import com.tax.cloud.core.model.DateModel;
import com.tax.cloud.core.model.Rest;
import com.tax.cloud.core.util.StringUtils;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtils {
public static final String YYYY_MM_DD = "yyyy-MM-dd";
public static final String YYYY_MM_DD_SLASH = "yyyy/MM/dd";
public static final String YYYY_MM_DD_HH_MM_DD_SLASH = "yyyy/MM/dd HH:mm:ss";
public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
public static final String YYYYMMDD = "yyyyMMdd";
public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
private static final String[] WEEK_DAYS = new String[]{"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
public DateUtils() {
}
public static String DateToStringFormat(Date date, String format) {
if(StringUtils.isNull(date)) {
return null;
} else {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
}
public static Date StringToDateFormat(String date, String format) {
if(StringUtils.isNull(date)) {
return null;
} else {
Date d = null;
try {
SimpleDateFormat e = new SimpleDateFormat(format);
d = e.parse(date);
} catch (ParseException var4) {
var4.printStackTrace();
}
return d;
}
}
public static String getYYmm() {
String year = DateToStringFormat(getSystemDate(), "yyyy");
String month = DateToStringFormat(getSystemDate(), "MM");
return StringUtils.concat("", new String[]{StringUtils.substring(year, year.length() - 2), month});
}
public static Date getSystemDate() {
return new Date();
}
public static long getSystemDateDifference(Date date) {
if(StringUtils.isNull(date)) {
return 0L;
} else {
Date systemDate = getSystemDate();
long days = (systemDate.getTime() - date.getTime()) / 86400000L;
return days;
}
}
public static long getDifference(Date startDate, Date endDate) throws DateException {
if(endDate.compareTo(startDate) == -1) {
throw new DateException("开始时间不能小于结束时间");
} else {
BigDecimal days = (new BigDecimal(endDate.getTime() - startDate.getTime())).divide(new BigDecimal(86400000), 0, 4);
System.out.println(days);
return days.longValue();
}
}
public static String getWeek(Date date) {
if(StringUtils.isNull(date)) {
return null;
} else {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int w = cal.get(7) - 1;
return WEEK_DAYS[w];
}
}
public static Date getEndDate(Date startDate, int days) {
Calendar cal = Calendar.getInstance();
cal.setTime(startDate);
cal.add(5, days);
return cal.getTime();
}
public static String timePass(Date date, int level) {
if(date == null) {
return null;
} else {
String result = null;
String res = DateToStringFormat(date, "yyyy-MM-dd");
if(level == 0) {
return res;
} else {
long time = 0L;
time = System.currentTimeMillis() - date.getTime();
if(time <= 0L) {
return "刚才";
} else {
if(time < 60000L) {
result = time / 1000L + "秒前";
if(level < 1) {
return res;
}
} else if(time < 3600000L) {
result = time / 1000L / 60L + "分钟前";
if(level < 2) {
return res;
}
} else if(time < 86400000L) {
result = time / 1000L / 60L / 60L + "小时前";
if(level < 3) {
return res;
}
} else if(time < 1296000000L) {
result = time / 1000L / 60L / 60L / 24L + "天前";
if(level < 3) {
return res;
}
} else {
result = res;
}
return result;
}
}
}
}
public static BigDecimal calculationDays(Rest rest, Date startTime, Date endTime, DateUtils.RestType restType) throws DateException {
BigDecimal total = new BigDecimal(0);
if(StringUtils.isEquals(DateUtils.RestType.LEAVE.getType(), restType.getType())) {
DateModel startModel = getRestDate(rest, startTime);
DateModel endModel = getRestDate(rest, endTime);
Calendar calendar = Calendar.getInstance();
if(startTime.compareTo(startModel.getEndMorningTime()) >= 0 && startTime.compareTo(startModel.getStartAfternoonTime()) <= 0) {
startTime = startModel.getStartAfternoonTime();
}
if(endTime.compareTo(endModel.getEndMorningTime()) >= 0 && endTime.compareTo(endModel.getStartAfternoonTime()) <= 0) {
endTime = endModel.getEndMorningTime();
}
if(startTime.compareTo(startModel.getStartMorningTime()) == -1) {
startTime = startModel.getStartMorningTime();
}
if(startTime.compareTo(startModel.getEndAfternoonTime()) == 1) {
calendar.setTime(startModel.getStartMorningTime());
calendar.add(5, 1);
startTime = calendar.getTime();
}
if(endTime.compareTo(endModel.getEndAfternoonTime()) == 1) {
endTime = endModel.getEndAfternoonTime();
}
if(endTime.compareTo(endModel.getStartMorningTime()) == -1) {
calendar.setTime(endModel.getEndAfternoonTime());
calendar.add(5, -1);
endTime = calendar.getTime();
}
long days = getDifference(startTime, endTime);
total = BigDecimal.valueOf(endTime.getTime() - startTime.getTime()).divide(BigDecimal.valueOf(3600000L), 1, 1);
total = total.subtract((new BigDecimal(24)).subtract(rest.getWorkHour()).multiply(new BigDecimal(days)));
startModel = getRestDate(rest, startTime);
endModel = getRestDate(rest, endTime);
if(startTime.compareTo(startModel.getEndMorningTime()) == -1 && endTime.compareTo(endModel.getStartAfternoonTime()) == 1) {
total = total.subtract(rest.getNoonHour());
}
} else if(StringUtils.isEquals(DateUtils.RestType.OVERTIME.getType(), restType.getType())) {
if(endTime.compareTo(startTime) == -1) {
throw new DateException("开始时间不能小于结束时间");
}
total = BigDecimal.valueOf(endTime.getTime() - startTime.getTime()).divide(BigDecimal.valueOf(3600000L), 1, 1);
}
return total;
}
public static void main(String[] args) {
Rest rest = new Rest("08:30", "11:30", "13:00", "17:30");
try {
BigDecimal e = calculationDays(rest, StringToDateFormat("2017-11-13 08:30:00", "yyyy-MM-dd HH:mm:ss"), StringToDateFormat("2017-11-13 17:30:00", "yyyy-MM-dd HH:mm:ss"), DateUtils.RestType.LEAVE);
System.out.println(e);
} catch (DateException var3) {
var3.printStackTrace();
}
}
private static DateModel getRestDate(Rest rest, Date date) {
Date startMorningTime = StringToDateFormat(DateToStringFormat(date, "yyyy-MM-dd") + " " + rest.getStartMorningTime() + ":00", "yyyy-MM-dd HH:mm:ss");
Date endMorningTime = StringToDateFormat(DateToStringFormat(date, "yyyy-MM-dd") + " " + rest.getEndMorningTime() + ":00", "yyyy-MM-dd HH:mm:ss");
Date startAfternoonTime = StringToDateFormat(DateToStringFormat(date, "yyyy-MM-dd") + " " + rest.getStartAfternoonTime() + ":00", "yyyy-MM-dd HH:mm:ss");
Date endAfternoonTime = StringToDateFormat(DateToStringFormat(date, "yyyy-MM-dd") + " " + rest.getEndAfternoonTime() + ":00", "yyyy-MM-dd HH:mm:ss");
return new DateModel(startMorningTime, endMorningTime, startAfternoonTime, endAfternoonTime);
}
public static enum RestType {
LEAVE("0"),
OVERTIME("1");
private String type;
private RestType() {
}
private RestType(String type) {
this.type = type;
}
public String getType() {
return this.type;
}
public void setType(String type) {
this.type = type;
}
}
public class DateException extends Exception { private static final long serialVersionUID = 5004274153680922246L; public DateException(String msg) { super(msg); } public DateException() { } }
import java.util.Date; public class DateModel { private Date startMorningTime; private Date endMorningTime; private Date startAfternoonTime; private Date endAfternoonTime; DateModel() { } public DateModel(Date startMorningTime, Date endMorningTime, Date startAfternoonTime, Date endAfternoonTime) { this.startMorningTime = startMorningTime; this.endMorningTime = endMorningTime; this.startAfternoonTime = startAfternoonTime; this.endAfternoonTime = endAfternoonTime; } public Date getStartMorningTime() { return this.startMorningTime; } public void setStartMorningTime(Date startMorningTime) { this.startMorningTime = startMorningTime; } public Date getEndMorningTime() { return this.endMorningTime; } public void setEndMorningTime(Date endMorningTime) { this.endMorningTime = endMorningTime; } public Date getStartAfternoonTime() { return this.startAfternoonTime; } public void setStartAfternoonTime(Date startAfternoonTime) { this.startAfternoonTime = startAfternoonTime; } public Date getEndAfternoonTime() { return this.endAfternoonTime; } public void setEndAfternoonTime(Date endAfternoonTime) { this.endAfternoonTime = endAfternoonTime; }
import java.math.BigDecimal; public class Rest { private String startMorningTime; private String endMorningTime; private String startAfternoonTime; private String endAfternoonTime; private BigDecimal workHour = new BigDecimal(8); private BigDecimal noonHour = new BigDecimal(1); public Rest(String startMorningTime, String endMorningTime, String startAfternoonTime, String endAfternoonTime, BigDecimal workHour, BigDecimal noonHour) { this.startMorningTime = startMorningTime; this.endMorningTime = endMorningTime; this.startAfternoonTime = startAfternoonTime; this.endAfternoonTime = endAfternoonTime; this.workHour = workHour; this.noonHour = noonHour; } public Rest(String startMorningTime, String endMorningTime, String startAfternoonTime, String endAfternoonTime) { this.startMorningTime = startMorningTime; this.endMorningTime = endMorningTime; this.startAfternoonTime = startAfternoonTime; this.endAfternoonTime = endAfternoonTime; } Rest() { } public String getStartMorningTime() { return this.startMorningTime; } public void setStartMorningTime(String startMorningTime) { this.startMorningTime = startMorningTime; } public String getEndMorningTime() { return this.endMorningTime; } public void setEndMorningTime(String endMorningTime) { this.endMorningTime = endMorningTime; } public String getStartAfternoonTime() { return this.startAfternoonTime; } public void setStartAfternoonTime(String startAfternoonTime) { this.startAfternoonTime = startAfternoonTime; } public String getEndAfternoonTime() { return this.endAfternoonTime; } public void setEndAfternoonTime(String endAfternoonTime) { this.endAfternoonTime = endAfternoonTime; } public BigDecimal getWorkHour() { return this.workHour; } public void setWorkHour(BigDecimal workHour) { this.workHour = workHour; } public BigDecimal getNoonHour() { return this.noonHour; } public void setNoonHour(BigDecimal noonHour) { this.noonHour = noonHour; } }
import com.google.gson.GsonBuilder; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public class StringUtils { public StringUtils() { } public static boolean isNull(Object obj) { return !(obj instanceof String)?obj == null:null == obj || "".equals(obj); } public static boolean isNotNull(Object object) { return !isNull(object); } public static boolean isEquals(String str1, String str2) { return str1 == null?false:str1.equals(str2); } public static String substring(String str, int sLength) { return isNull(str)?null:str.substring(sLength); } public static String substring(String str, int sLength, int eLength) { return isNull(str)?null:str.substring(sLength, eLength); } public static String[] split(String str, String regex) { return isNull(str)?null:str.split(regex); } public static List<String> splitToList(String str, String regex) { if(isNull(str)) { return null; } else { ArrayList resultList = new ArrayList(); List resultObject = arrayToList(str.split(regex)); Iterator i$ = resultObject.iterator(); while(i$.hasNext()) { Object obj = i$.next(); resultList.add(obj.toString()); } return resultList; } } public static List<Object> arrayToList(Object[] strArray) { return isNull(strArray)?null:new ArrayList(Arrays.asList(strArray)); } public static String join(Object[] arrays, String regex) { if(isNull(arrays)) { return null; } else { StringBuffer str = new StringBuffer(); for(int i = 0; i < arrays.length; ++i) { str = arrays.length - 1 == i?str.append(arrays[i]):str.append(arrays[i] + regex); } return str.toString(); } } public static String concat(String regex, String... str) { Object[] object = new Object[str.length]; for(int i = 0; i < str.length; ++i) { object[i] = str[i]; } return join(object, regex); } public static <T> T stringToBena(String json, Class<T> bean) { return isNull(json)?null:(new GsonBuilder()).create().fromJson(json, bean); } /** @deprecated */ @Deprecated public static String arrayToString(Object[] arrays, String regex) { String str = ""; for(int i = 0; i < arrays.length; ++i) { str = str + concat(regex, new String[]{arrays[i].toString()}); } return str; } public static void beanCopy(Object obj1, Object obj2) { Class cls1 = obj1.getClass(); Class cls2 = obj2.getClass(); Field[] fields1 = cls1.getDeclaredFields(); ArrayList fieldList = new ArrayList(Arrays.asList(fields1)); Field[] fields2; if(isNotNull(cls1.getSuperclass())) { fields2 = cls1.getSuperclass().getDeclaredFields(); Field[] i$ = fields2; int field1 = fields2.length; for(int arr$ = 0; arr$ < field1; ++arr$) { Field len$ = i$[arr$]; fieldList.add(len$); } } fields2 = cls2.getDeclaredFields(); Iterator var15 = fieldList.iterator(); while(var15.hasNext()) { Field var16 = (Field)var15.next(); var16.setAccessible(true); Field[] var17 = fields2; int var18 = fields2.length; for(int i$1 = 0; i$1 < var18; ++i$1) { Field field2 = var17[i$1]; field2.setAccessible(true); if(isEquals(var16.getName(), field2.getName()) && isEquals(var16.getType().getName(), field2.getType().getName())) { try { field2.set(obj2, var16.get(obj1)); } catch (IllegalAccessException var14) { var14.printStackTrace(); } } } } } public static Map<String, String> transBean2Map(Object obj) { HashMap returnMap = new HashMap(); Class cls = obj.getClass(); Field[] fields = cls.getDeclaredFields(); ArrayList fieldList = new ArrayList(Arrays.asList(fields)); if(isNotNull(cls.getSuperclass())) { Field[] i$ = cls.getSuperclass().getDeclaredFields(); Field[] field = i$; int e = i$.length; for(int i$1 = 0; i$1 < e; ++i$1) { Field field1 = field[i$1]; fieldList.add(field1); } } Iterator var11 = fieldList.iterator(); while(var11.hasNext()) { Field var12 = (Field)var11.next(); var12.setAccessible(true); try { String var13 = var12.getType().getName(); byte var14 = -1; switch(var13.hashCode()) { case 1195259493: if(var13.equals("java.lang.String")) { var14 = 0; } default: switch(var14) { case 0: if(isNotNull(var12.get(obj))) { returnMap.put(var12.getName().toString(), var12.get(obj).toString()); } } } } catch (IllegalAccessException var10) { var10.printStackTrace(); } } return returnMap; } public static String listToString(List<String> stringList, String regex) { if(isNull(stringList)) { return null; } else { Object result = null; Object[] object = new Object[stringList.size()]; for(int i = 0; i < stringList.size(); ++i) { object[i] = stringList.get(i); } return join(object, regex); } }