weaver-hrm-salary/src/com/engine/salary/formlua/util/DateUtil.java

212 lines
4.9 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.engine.salary.formlua.util;
import com.engine.salary.formlua.entity.parameter.DataType;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtil {
protected static final Logger logger = LoggerFactory.getLogger(DateUtil.class);
private static String[] parsePatterns = {"yyyy-MM-dd","yyyy年MM月dd日",
"yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy/MM/dd",
"yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyyMMdd","yy-MM","yy/MM"};
private static String[] dateComponentKeyList={"DateComponent","DateInterval","TimeComponent"};
public static void main(String args[]){
}
/**
* 构建日期对象
* @param dateChar
* @return
*/
public static Date buildDateByDateChar(String dateChar){
Date resultDate=null;
if(StringUtils.isEmpty(dateChar)){
return resultDate;
}
String formatString=buildFormat(dateChar);
if(StringUtils.isEmpty(formatString)){
return resultDate;
}
SimpleDateFormat simpleDateFormat=new SimpleDateFormat(formatString);
simpleDateFormat.setLenient(false);
try {
resultDate=simpleDateFormat.parse(dateChar);
} catch (ParseException e) {
logger.error("err",e);
}
return resultDate;
}
/**
* 判断是否是日期控件
* @param data
* @return
*/
public static boolean isDateComponent(Object data){
if(data instanceof DataType){
DataType dataType=(DataType)data;
if(dataType.getComponentKey()!=null){
for (String dateKey:dateComponentKeyList){
if(dateKey.equalsIgnoreCase(dataType.getComponentKey())){
return true;
}
}
}
}else if(data!=null && isValidDate(data+"")){
return true;
}
return false;
}
public static boolean isValidDate(String str) {
boolean convertSuccess=false;
for(String s:parsePatterns){
convertSuccess=parseDateString(str,s);
if(convertSuccess){
break;
}
}
return convertSuccess;
}
public static boolean parseDateString(String dateString,String formatString){
boolean convertSuccess=true;
SimpleDateFormat format = new SimpleDateFormat(formatString);
try {
format.setLenient(false);
format.parse(dateString);
} catch (ParseException e) {
// logger.error("err",e);
convertSuccess=false;
}
return convertSuccess;
}
/**
* 判断日期时间的格式
* @param dateTimeStr
* @return
*/
public static String buildFormat(String dateTimeStr,String type){
String fmateStr=null;
int len=dateTimeStr.length();
switch (type){
case "Y":
fmateStr="yyyy";
break;
case "M":
fmateStr="yyyy-MM";
break;
case "D":
fmateStr="yyyy-MM-dd";
break;
case "H":
fmateStr="yyyy-MM-dd HH";
break;
case "I":
fmateStr="yyyy-MM-dd HH:mm";
break;
case "S":
fmateStr="yyyy-MM-dd HH:mm:ss";
break;
}
return fmateStr;
}
public static String buildFormat(String dateTimeStr){
String fmateStr=null;
int len=dateTimeStr.length();
switch (len){
case 4:
if(dateTimeStr.indexOf(":")<0){
fmateStr="yyyy";
}else if(dateTimeStr.indexOf("-")<0){
fmateStr="H:mm";
}
break;
case 5:
if(dateTimeStr.indexOf(":")<0){
fmateStr="yy-MM";
}else if(dateTimeStr.indexOf("-")<0){
fmateStr="HH:mm";
}
break;
case 7:
if(dateTimeStr.indexOf(":")<0){
fmateStr="yyyy-MM";
}else if(dateTimeStr.indexOf("-")<0){
fmateStr="H:mm:ss";
}
break;
case 8:
fmateStr="HH:mm:ss";
break;
case 9:
fmateStr="yyyy-MM-dd";
break;
case 10:
fmateStr="yyyy-MM-dd";
break;
case 13:
fmateStr="yyyy-MM-dd HH";
break;
case 16:
fmateStr="yyyy-MM-dd HH:mm";
break;
case 19:
fmateStr="yyyy-MM-dd HH:mm:ss";
break;
default:
fmateStr="";
}
return fmateStr;
}
/**
* 判断参数类型并且获取content属性的值或者String类型直接返回
* @param obj
* @return
*/
public static String getContent(Object obj, SimpleDateFormat formatter){
String date="";
if(obj instanceof String || obj instanceof Character){
date=obj.toString();
}else if(obj instanceof Date){
date=formatter.format(obj);
}else{
DataType dataType=(DataType)obj;
Object content=dataType.getText();
if(null!=content){
date=content.toString();
}else {
date = dataType.getContent() == null ? null : dataType.getContent().toString();
}
}
return date;
}
/**
* 计算日期间相隔天数
* @param start
* @param end
* @return
*/
public static int daysBetween(Date start, Date end) {
if(start == null || end == null || start.getTime() >= end.getTime()) return 0;
Date startDate = DateUtils.truncate(start, Calendar.DATE);
return Days.daysBetween(new DateTime(startDate), new DateTime(end)).getDays();
}
}