package com.baosight.kwan;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
public class Tools {
public static final String STRING_EMPTY = "";
public static final String GBK = "gbk";
public static final String NULL = "null";
public static final String N_ONLY = "N";
public static final String L_ONLY = "L";
public static final String NUMBER = "0123456789";
public static final String LETTER = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static final String ISO_8859_1 = "iso-8859-1";
public static final String STR_ZERO = "0";
public static final double DOUBLE_ZERO = 0;
public static final String DATE_SHORT = "yyyy-MM-dd";
public static final String DATE_LONG = "yyyy-MM-dd HH:mm:ss";
private Tools() {
// 禁止该类被实例化
}
/**
* 判断对象是否为null或者为空
*
* @param object
* 判断的对象
* @return
*/
public static boolean nullOrEmpty(Object object) {
return object == null || STRING_EMPTY.equals(object.toString().trim());
}
/**
* 判断对象是否为null或者为空
*
* @param object
* 判断的对象
* @return
*/
public static boolean notNullAndEmpty(Object object) {
return nullOrEmpty(object) ? false : true;
}
/**
* 获取对象的String值
*
* @param object
* 操作的对象
* @return
*/
public static String getStrValue(Object object) {
if (nullOrEmpty(object)) {
return STRING_EMPTY;
} else {
return object.toString().trim();
}
}
/**
* 获取对象的int值[譬如:String型的"1.25",用Integer.valueOf().intValue()或者Integer.parseInt()都会抛出异常,需先转换为double]
*
* @param object
* 被转换的对象
* @return
*/
public static int getIntValue(Object object) {
return (int) getDoubleValue(object);
}
/**
* 获取对象的double值
*
* @param object
* 被转换的对象
* @return
*/
public static double getDoubleValue(Object object) {
try {
return Double.valueOf(getStrValue(object)).doubleValue();
} catch (Exception ex) {
return DOUBLE_ZERO;
}
}
/**
* 得到当前系统时间,返回String类型,格式为"yyyy-MM-dd"
*
* @return
*/
public static String getSysyyyyMMdd() {
SimpleDateFormat f = new SimpleDateFormat(DATE_SHORT);
return f.format(new Date());
}
/**
* 得到当前系统时间,返回Date类型,格式为yyyy-MM-dd
*
* @return
*/
public static Date getSysShortDate() {
SimpleDateFormat f = new SimpleDateFormat(DATE_SHORT);
try {
return f.parse(getSysyyyyMMdd());
} catch (Exception e) {
return null;
}
}
/**
* 得到当前系统时间 返回String类型,格式为"yyyy-MM-dd HH:mm:ss"
*
* @return
*/
public static String getSysyyyyMMddHHmmss() {
SimpleDateFormat f = new SimpleDateFormat(DATE_LONG);
return f.format(new Date());
}
/**
* 得到当前系统时间 返回Date类型,格式为yyyy-MM-dd HH:mm:ss
*
* @return
*/
public static Date getSysLongDate() {
SimpleDateFormat f = new SimpleDateFormat(DATE_LONG);
try {
return f.parse(getSysyyyyMMddHHmmss());
} catch (Exception e) {
return null;
}
}
/**
* 将String型日期转换为Date型长日期(带时分秒)
*
* @param date
* 被转换的对象
* @return
*/
public static Date stringToDate(String date) {
if (nullOrEmpty(date)) {
return null;
} else {
SimpleDateFormat f = new SimpleDateFormat(DATE_LONG);
try {
return f.parse(getStrValue(date));
} catch (Exception e) {
return null;
}
}
}
/**
* 将Date型日期转换为String型长日期(带时分秒)
*
* @param date
* 被转换的对象
* @return
*/
public static String dateToString(Date date) {
if (nullOrEmpty(date)) {
return STRING_EMPTY;
} else {
SimpleDateFormat f = new SimpleDateFormat(DATE_LONG);
return f.format(date);
}
}
/**
* 将String型指定格式日期转换为Date型日期
*
* @param date
* 被转换的对象
* @param pattern
* 被转换的对象格式
* @return
*/
public static Date stringToDate(String date, String pattern) {
if (nullOrEmpty(pattern)) {
return stringToDate(date);
} else {
SimpleDateFormat f = new SimpleDateFormat(pattern);
try {
return f.parse(getStrValue(date));
} catch (Exception e) {
return null;
}
}
}
/**
* 将Date型日期转换为String型指定格式日期
*
* @param date
* 被转换日期对象
* @param pattern
* 指定转换格式
* @return
*/
public static String dateToString(Date date, String pattern) {
if (nullOrEmpty(pattern)) {
return dateToString(date);
} else {
SimpleDateFormat format = new SimpleDateFormat(pattern);
return format.format(date);
}
}
/**
* 在指定时间上增加指定年、月、日、时、分、秒,日期类型
*
* @param date
* 指定日期时间
* @param field
* 需要做变更的日历时间域
* @param value
* 增加的时间
* @return
*/
public static Date markDate(Date date, int field, int value) {
if (nullOrEmpty(date)) {
return null;
} else {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
switch (field) {
case Calendar.YEAR:
calendar
.set(Calendar.YEAR, calendar.get(Calendar.YEAR) + value);
break;
case Calendar.MONTH:
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH)
+ value);
break;
case Calendar.DAY_OF_YEAR:
calendar.set(Calendar.DAY_OF_YEAR, calendar
.get(Calendar.DAY_OF_YEAR)
+ value);
break;
case Calendar.HOUR:
calendar
.set(Calendar.HOUR, calendar.get(Calendar.HOUR) + value);
break;
case Calendar.MINUTE:
calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE)
+ value);
break;
case Calendar.SECOND:
calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND)
+ value);
break;
default:
break;
}
return calendar.getTime();
}
}
/**
* double型在做运算时会失去精度,高精度数据运算需要用BigDecimal,同时必须用String来构造
*/
/**
* 高精度加法运算
*
* @param data1
* 加数
* @param data2
* 被加数
* @return
*/
public static double addition(Object data1, Object data2) {
return new BigDecimal(getStrValue(getDoubleValue(data1))).add(
new BigDecimal(getStrValue(getDoubleValue(data2))))
.doubleValue();
}
/**
* 高精度减法运算
*
* @param data1
* 减数
* @param data2
* 被减数
* @return
*/
public static double subduction(Object data1, Object data2) {
return new BigDecimal(getStrValue(getDoubleValue(data1))).subtract(
new BigDecimal(getStrValue(getDoubleValue(data2))))
.doubleValue();
}
/**
* 高精度乘法运算
*
* @param data1
* 乘数
* @param data2
* 被乘数
* @return
*/
public static double multiplication(Object data1, Object data2) {
return new BigDecimal(getStrValue(getDoubleValue(data1))).multiply(
new BigDecimal(getStrValue(getDoubleValue(data2))))
.doubleValue();
}
/**
* 高精度除法运算
*
* @param data1
* 除数
* @param data2
* 被除数
* @return
*/
public static double division(Object data1, Object data2) {
if (getDoubleValue(data2) != DOUBLE_ZERO) {
return new BigDecimal(getStrValue(getDoubleValue(data1))).divide(
new BigDecimal(getStrValue(getDoubleValue(data2))))
.doubleValue();
} else {
return DOUBLE_ZERO;
}
}
项目已经上线,现在处于维护阶段,没什么事情做,就即兴写了一些常用的common方法(很多方法写成后未经测试,另外原稿很多方法中check失败是抛异常的,后来一想,共公共方法,也许return默认值比较好,于是出现了很多类似return STRING_EMPTY或者return null),贴在这里,仅供参考交流之用,不妥之处也请大家指正。
(原文链接)