1. 程式人生 > >大資料專案實戰之六:6.工具類編寫和說明

大資料專案實戰之六:6.工具類編寫和說明

日期時間工具類

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 日期時間工具類
 * @author Administrator
 *
 */
public class DateUtils {
	
	public static final SimpleDateFormat TIME_FORMAT = 
			new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	public static final SimpleDateFormat DATE_FORMAT = 
			new SimpleDateFormat("yyyy-MM-dd");
	
	/**
	 * 判斷一個時間是否在另一個時間之前
	 * @param time1 第一個時間
	 * @param time2 第二個時間
	 * @return 判斷結果
	 */
	public static boolean before(String time1, String time2) {
		try {
			Date dateTime1 = TIME_FORMAT.parse(time1);
			Date dateTime2 = TIME_FORMAT.parse(time2);
			
			if(dateTime1.before(dateTime2)) {
				return true;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
	
	/**
	 * 判斷一個時間是否在另一個時間之後
	 * @param time1 第一個時間
	 * @param time2 第二個時間
	 * @return 判斷結果
	 */
	public static boolean after(String time1, String time2) {
		try {
			Date dateTime1 = TIME_FORMAT.parse(time1);
			Date dateTime2 = TIME_FORMAT.parse(time2);
			
			if(dateTime1.after(dateTime2)) {
				return true;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return false;
	}
	
	/**
	 * 計算時間差值(單位為秒)
	 * @param time1 時間1
	 * @param time2 時間2
	 * @return 差值
	 */
	public static int minus(String time1, String time2) {
		try {
			Date datetime1 = TIME_FORMAT.parse(time1);
			Date datetime2 = TIME_FORMAT.parse(time2);
			
			long millisecond = datetime1.getTime() - datetime2.getTime();
			
			return Integer.valueOf(String.valueOf(millisecond / 1000));  
		} catch (Exception e) {
			e.printStackTrace();
		}
		return 0;
	}
	
	/**
	 * 獲取年月日和小時
	 * @param datetime 時間(yyyy-MM-dd HH:mm:ss)
	 * @return 結果
	 */
	public static String getDateHour(String datetime) {
		String date = datetime.split(" ")[0];
		String hourMinuteSecond = datetime.split(" ")[1];
		String hour = hourMinuteSecond.split(":")[0];
		return date + "_" + hour;
	}  
	
	/**
	 * 獲取當天日期(yyyy-MM-dd)
	 * @return 當天日期
	 */
	public static String getTodayDate() {
		return DATE_FORMAT.format(new Date());  
	}
	
	/**
	 * 獲取昨天的日期(yyyy-MM-dd)
	 * @return 昨天的日期
	 */
	public static String getYesterdayDate() {
		Calendar cal = Calendar.getInstance();
		cal.setTime(new Date());  
		cal.add(Calendar.DAY_OF_YEAR, -1);  
		
		Date date = cal.getTime();
		
		return DATE_FORMAT.format(date);
	}
	
	/**
	 * 格式化日期(yyyy-MM-dd)
	 * @param date Date物件
	 * @return 格式化後的日期
	 */
	public static String formatDate(Date date) {
		return DATE_FORMAT.format(date);
	}
	
	/**
	 * 格式化時間(yyyy-MM-dd HH:mm:ss)
	 * @param date Date物件
	 * @return 格式化後的時間
	 */
	public static String formatTime(Date date) {
		return TIME_FORMAT.format(date);
	}
	
}

================================================================================================

數字格式工具類

import java.math.BigDecimal;

/**
 * 數字格式工具類
 * @author Administrator
 *
 */
public class NumberUtils {

	/**
	 * 格式化小數
	 * @param  num 傳入的數字
	 * @param scale 四捨五入的位數
	 * @return 格式化小數
	 */
	public static double formatDouble(double num, int scale) {
		BigDecimal bd = new BigDecimal(num);  
		return bd.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
	}
	
}

================================================================================================

引數工具類

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/**
 * 引數工具類
 * @author Administrator
 *
 */
public class ParamUtils {

	/**
	 * 從命令列引數中提取任務id
	 * @param args 命令列引數
	 * @return 任務id
	 */
	public static Long getTaskIdFromArgs(String[] args) {
		try {
			if(args != null && args.length > 0) {
				return Long.valueOf(args[0]);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}  
		return null;
	}
	
	/**
	 * 從JSON物件中提取引數
	 * @param jsonObject JSON物件
	 * @return 引數
	 */
	public static String getParam(JSONObject jsonObject, String field) {
		JSONArray jsonArray = jsonObject.getJSONArray(field);
		if(jsonArray != null && jsonArray.size() > 0) {
			return jsonArray.getString(0);
		}
		return null;
	}
	
}

================================================================================================

字串工具類

/**
 * 字串工具類
 * @author Administrator
 *
 */
public class StringUtils {

	/**
	 * 判斷字串是否為空
	 * @param str 字串
	 * @return 是否為空
	 */
	public static boolean isEmpty(String str) {
		return str == null || "".equals(str);
	}
	
	/**
	 * 判斷字串是否不為空
	 * @param str 字串
	 * @return 是否不為空
	 */
	public static boolean isNotEmpty(String str) {
		return str != null && !"".equals(str);
	}
	
	/**
	 * 截斷字串兩側的逗號
	 * @param str 字串
	 * @return 字串
	 */
	public static String trimComma(String str) {
		if(str.startsWith(",")) {
			str = str.substring(1);
		}
		if(str.endsWith(",")) {
			str = str.substring(0, str.length() - 1);
		}
		return str;
	}
	
	/**
	 * 補全兩位數字
	 * @param str
	 * @return
	 */
	public static String fulfuill(String str) {
		if(str.length() == 2) {
			return str;
		} else {
			return "0" + str;
		}
	}
	
	/**
	 * 從拼接的字串中提取欄位
	 * @param str 字串
	 * @param delimiter 分隔符 
	 * @param field 欄位
	 * @return 欄位值
	 */
	public static String getFieldFromConcatString(String str, 
			String delimiter, String field) {
		String[] fields = str.split(delimiter);
		for(String concatField : fields) {
			String fieldName = concatField.split("=")[0];
			String fieldValue = concatField.split("=")[1];
			if(fieldName.equals(field)) {
				return fieldValue;
			}
		}
		return null;
	}
	
	/**
	 * 從拼接的字串中給欄位設定值
	 * @param str 字串
	 * @param delimiter 分隔符 
	 * @param field 欄位名
	 * @param newFieldValue 新的field值
	 * @return 欄位值
	 */
	public static String setFieldInConcatString(String str, 
			String delimiter, String field, String newFieldValue) {
		String[] fields = str.split(delimiter);
		
		for(int i = 0; i < fields.length; i++) {
			String fieldName = fields[i].split("=")[0];
			if(fieldName.equals(field)) {
				String concatField = fieldName + "=" + newFieldValue;
				fields[i] = concatField;
				break;
			}
		}
		
		StringBuffer buffer = new StringBuffer("");
		for(int i = 0; i < fields.length; i++) {
			buffer.append(fields[i]);
			if(i < fields.length - 1) {
				buffer.append("|");  
			}
		}
		
		return buffer.toString();
	}
	
}

================================================================================================

校驗工具類

/**
 * 校驗工具類
 * @author Administrator
 *
 */
public class ValidUtils {
	
	/**
	 * 校驗資料中的指定欄位,是否在指定範圍內
	 * @param data 資料
	 * @param dataField 資料欄位
	 * @param parameter 引數
	 * @param startParamField 起始引數欄位
	 * @param endParamField 結束引數欄位
	 * @return 校驗結果
	 */
	public static boolean between(String data, String dataField, 
			String parameter, String startParamField, String endParamField) {
		String startParamFieldStr = StringUtils.getFieldFromConcatString(
				parameter, "\\|", startParamField);
		String endParamFieldStr = StringUtils.getFieldFromConcatString(
				parameter, "\\|", endParamField); 
		if(startParamFieldStr == null || endParamFieldStr == null) {
			return true;
		}
		
		int startParamFieldValue = Integer.valueOf(startParamFieldStr);
		int endParamFieldValue = Integer.valueOf(endParamFieldStr);
		
		String dataFieldStr = StringUtils.getFieldFromConcatString(
				data, "\\|", dataField);
		if(dataFieldStr != null) {
			int dataFieldValue = Integer.valueOf(dataFieldStr);
			if(dataFieldValue >= startParamFieldValue &&
					dataFieldValue <= endParamFieldValue) {
				return true;
			} else {
				return false;
			}
		}
		
		return false;
	}
	
	/**
	 * 校驗資料中的指定欄位,是否有值與引數欄位的值相同
	 * @param data 資料
	 * @param dataField 資料欄位
	 * @param parameter 引數
	 * @param paramField 引數欄位
	 * @return 校驗結果
	 */
	public static boolean in(String data, String dataField, 
			String parameter, String paramField) {
		String paramFieldValue = StringUtils.getFieldFromConcatString(
				parameter, "\\|", paramField);
		if(paramFieldValue == null) {
			return true;
		}
		String[] paramFieldValueSplited = paramFieldValue.split(",");  
		
		String dataFieldValue = StringUtils.getFieldFromConcatString(
				data, "\\|", dataField);
		if(dataFieldValue != null) {
			String[] dataFieldValueSplited = dataFieldValue.split(",");
			
			for(String singleDataFieldValue : dataFieldValueSplited) {
				for(String singleParamFieldValue : paramFieldValueSplited) {
					if(singleDataFieldValue.equals(singleParamFieldValue)) {
						return true;
					}
				}
			}
 		}
		
		return false;
	}
	
	/**
	 * 校驗資料中的指定欄位,是否在指定範圍內
	 * @param data 資料
	 * @param dataField 資料欄位
	 * @param parameter 引數
	 * @param paramField 引數欄位
	 * @return 校驗結果
	 */
	public static boolean equal(String data, String dataField, 
			String parameter, String paramField) {  
		String paramFieldValue = StringUtils.getFieldFromConcatString(
				parameter, "\\|", paramField);
		if(paramFieldValue == null) {
			return true;
		}
		
		String dataFieldValue = StringUtils.getFieldFromConcatString(
				data, "\\|", dataField);
		if(dataFieldValue != null) {
			if(dataFieldValue.equals(paramFieldValue)) {
				return true;
			}
 		}
		
		return false;
	}
	
}