/**
* @(#)file PCMSUtil.java
* @(#)author
* @(#)version 1.0
* @(#)date 2003-05-23
* @(#)since JDK1.3.1
**
* Copyright (c) 2002-2003 www.hwenc.com, Inc.
* All rights reserved.
* This software is the proprietary information of hwenc, Inc.
*/
package kr.co.udapsoft.common.util;
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.StringTokenizer;
import java.util.Vector;
import kr.co.hsnc.common.base.WAFLogger;
import kr.co.hsnc.common.util.PatternUtil;
import kr.co.hsnc.common.util.StringUtil;
import kr.co.hsnc.common.util.ValueObject;
import com.udapsoft.waf.common.util.DateUtil;
/**
* IPS에서 사용되는 유틸리티 메소드를 모아둔 클래스다.
* Formatter클래스는 DateUtil.java의 facade 클래스이기도 하다.
*
* @author hanajava
*/
public class PCMSUtil {
//2004-07-01 추가
private static final int DAY_OF_MONTH = 12;
/** 기본 기간 설정
* @return
*/
public static ValueObject getDefaultPeriod() {
return DateUtil.getDefaultPeriod();
}
/**
* 현설일시 얻기(일자)
* by hanajava
* @param str
* @return
*/
public static String formatExplDate1(String str) {
try {
str = replace(str, "-", "");
StringBuffer date = new StringBuffer(str.substring(0, 8));
return date.insert(4, "-").insert(7, "-").toString();
} catch (Exception e) {
return "";
}
}
/**
* 현설일지 얻기(시간)
* by hanajava
* @param str
* @return
*/
public static String formatExplDate2(String str) {
try {
str = replace(str, "-", "");
str = replace(str, ":", "");
StringBuffer date = new StringBuffer(str.substring(8));
return date.insert(2, ":").toString();
} catch (Exception e) {
return "";
}
}
/**
* 문자열중 대상문자열를 특정문자열로 변경한다.
* ex) replace("hanajava", "hana", "java") -> "javajava"
* @param line
* @param oldStr 대상문자열
* @param newStr 특정문자열
* @return
*/
/**
public static String replace(String line, String oldStr, String newStr){
/*if(line == null || line.length() == 0){
return "";
}
int index = 0;
while((index = line.indexOf(oldStr, index)) >= 0){
line = line.substring(0, index) + newStr + line.substring(index+oldStr.length());
index += newStr.length();
}
return line;
return org.apache.commons.lang.StringUtils.replace (line, oldStr, newStr);
}
*/
/**
* 문자열중 대상문자열를 특정문자열로 변경한다.
* ex) replace("hanajava", "hana", "java") -> "javajava"
* @param line
* @param oldStr 대상문자열
* @param newStr 특정문자열
* @return
*/
public static String replace(String line, String oldStr, String newStr) {
if (line == null || line.length() == 0) {
return "";
}
int index = 0;
while ((index = line.indexOf(oldStr, index)) >= 0) {
line = line.substring(0, index) + newStr
+ line.substring(index + oldStr.length());
index += newStr.length();
}
return line;
//return org.apache.commons.lang.StringUtils.replace (line, oldStr, newStr);
}
/**
* html 에 스페이스( ) 추가
* @param cnt
* @return
*/
public static String addSpace(String cnt) {
return addSpace(Integer.parseInt(cnt));
}
/**
* html 에 스페이스( ) 추가
* @param cnt
* @return
*/
public static String addSpace(int cnt) {
StringBuffer strBuf = new StringBuffer();
if (cnt < 1)
return "";
for (int i = 0; i < cnt; i++)
strBuf.append(" ");
return strBuf.toString();
}
/**
* 숫자를 한글로 변경한다.
* 12345678 -> 일천이백삼십사만오천유백칠십팔
* @param number
* @return
*/
public static String toHangle(long number) {
String rtnStr = "";
String numStr = Long.toString(number);
String[] bigUnitArray = { "", "만", "억", "조" };
String[] unitArray = { "", "십", "백", "천" };
String[] hanArray = { "", "일", "이", "삼", "사", "오", "육", "칠", "팔", "구" };
Vector splitedNum = new Vector();
int pos = numStr.length();
int index = 0;
while (true) {
if (pos - 4 > 0) {
splitedNum.add(numStr.substring(pos - 4, pos));
} else {
splitedNum.add(numStr.substring(0, pos));
break;
}
pos = pos - 4;
index++;
}
int tmpLen = 0;
int splietedNumSize = splitedNum.size();
String tmp = "";
for (int i = splietedNumSize - 1; i >= 0; i--) {
tmp = (String) splitedNum.get(i);
tmpLen = ((String) splitedNum.get(i)).length();
for (int j = tmpLen; j > 0; j--) {
String s = tmp.substring((tmpLen - j), (tmpLen - j) + 1);
if (s.equals("0"))
continue;
/* by jetdoc */
/*
if( s.equals("1") && j != 1 && !(i == splietedNumSize-1 && j == tmpLen) ) {
rtnStr += unitArray[j-1];
}
else {
rtnStr += hanArray[Integer.parseInt(s)] + unitArray[j-1];
}
*/
if (s.equals("-")) {
rtnStr += s;
} else {
rtnStr += hanArray[Integer.parseInt(s)] + unitArray[j - 1];
}
}
if (!tmp.equals("-") && Integer.parseInt(tmp) != 0)
rtnStr += bigUnitArray[i];
}
return rtnStr;
}
/**
* 소수점을 적용하여 숫자를 한글로 변경한다. -2010.12.07 한지훈
* 12345678.12 -> 일천이백삼십사만오천유백칠십팔.일이
* @param number
* @return
*/
public static String toHangule_decimal(String amt) {
String rtnStr = "";
String rtnStr_decimal = "";
String numStr = StringUtil.replace(amt,",","");
String numStr_decimal = StringUtil.replace(amt,",","");
String[] bigUnitArray = { "", "만", "억", "조" };
String[] unitArray = { "", "십", "백", "천" };
String[] hanArray = { "", "일", "이", "삼", "사", "오", "육", "칠", "팔", "구" };
String[] hanArray_decimal = { "영", "일", "이", "삼", "사", "오", "육", "칠", "팔", "구" };
Vector splitedNum = new Vector();
int decimal_pos = numStr.indexOf(".");
if (decimal_pos == -1) {
numStr = numStr.substring(0, numStr.length());
}else {
numStr = numStr.substring(0, decimal_pos);
numStr_decimal = numStr_decimal.substring(decimal_pos+1, numStr_decimal.length());
}
int pos = numStr.length();
int pos_decimal = numStr_decimal.length();
int index = 0;
while (true) {
if (pos - 4 > 0) {
splitedNum.add(numStr.substring(pos - 4, pos));
} else {
splitedNum.add(numStr.substring(0, pos));
break;
}
pos = pos - 4;
index++;
}
int tmpLen = 0;
int splietedNumSize = splitedNum.size();
String tmp = "";
for (int i = splietedNumSize - 1; i >= 0; i--) {
tmp = (String) splitedNum.get(i);
tmpLen = ((String) splitedNum.get(i)).length();
for (int j = tmpLen; j > 0; j--) {
String s = tmp.substring((tmpLen - j), (tmpLen - j) + 1);
if (s.equals("0"))
continue;
if (s.equals("-")) {
rtnStr += s;
} else {
rtnStr += hanArray[Integer.parseInt(s)] + unitArray[j - 1];
}
}
if (!tmp.equals("-") && Integer.parseInt(tmp) != 0)
rtnStr += bigUnitArray[i];
}
if (decimal_pos != -1) {
rtnStr_decimal = ".";
for (int j = pos_decimal; j > 0; j--) {
String m = numStr_decimal.substring((pos_decimal - j), (pos_decimal - j) + 1);
rtnStr_decimal += hanArray_decimal[Integer.parseInt(m)];
}
}
return rtnStr+rtnStr_decimal;
}
/** 1.1.1 ---> 01.01.01 로 변환
* by jetdoc
* @param str
* @param len
* @return
*/
public static String lpad4Dot(String str, int len) {
String[] strList = null;
StringBuffer strBuf = new StringBuffer();
strList = PatternUtil.split(str, ".");
for (int i = 0; i < strList.length; i++) {
strBuf.append(StringUtil.lpad(strList[i], len));
if (i != strList.length - 1)
strBuf.append(".");
}
return strBuf.toString();
}
public static float doRound(float num) {
return doRound(num, 3);
}
public static double doRound(double num) {
return doRound(num, 3);
}
/** 반올림 함수 ( JDK 1.4부터 지원 : JDK1.3을 위해 구현 )
* by jetdoc
* @param num
* @param pos
* @return
*/
public static float doRound(float num, int pos) {
double posV;
if (pos == 0) {
posV = 1;
} else {
posV = Math.pow(10, (double) pos);
}
return (float) (Math.round(num * posV) / posV);
}
/** 반올림 함수 ( JDK 1.4부터 지원 : JDK1.3을 위해 구현 )
* by jetdoc
* @param num
* @param pos
* @return
*/
public static double doRound(double num, int pos) {
double posV;
if (pos == 0) {
posV = 1;
} else {
posV = Math.pow(10, (double) pos);
}
return (Math.round(num * posV) / posV);
}
/**
* 금액 0원일때 "" 리턴
* @param cnt
* @return
*/
/*
public static String zeroSpace(String str){
if(str.equals("0")) str = "";
return str;
}
*/
/******추가***************SSS*************************************************/
/**
* 이전달 구하기
*
* @param String
* @return String
* @exception
*/
public static String getBeforeMonth(String yyyymm) {
if (yyyymm.equals(""))
return "";
String pre_month = "";
String s_month = "";
String s_year = yyyymm.substring(0, 4);
int i_month = Integer.parseInt(yyyymm.substring(4, 6));
i_month--;
if (i_month == 0) {
i_month = 12;
s_year = Integer.parseInt(s_year) - 1 + "";
}
if (i_month < 10)
s_month = "0" + i_month;
else
s_month = i_month + "";
pre_month = s_year + s_month;
return pre_month;
}
/**
*@param yyyymmdd
*@return
*기 능 : 하루 전 일자 가져오기
*@author seafrog(pck)
*@version 2006. 4. 23
*@since JDK1.3
*----------------------------------------------------------
*/
public static String getBeforeDay(String yyyymmdd) {
java.text.SimpleDateFormat formatt = new java.text.SimpleDateFormat(
"yyyyMMdd");
java.util.Calendar calenda = java.util.Calendar.getInstance();
java.util.Date date = null;
try {
date = formatt.parse(yyyymmdd);
calenda.setTime(date);
calenda.add(java.util.Calendar.DAY_OF_YEAR, -1);
yyyymmdd = formatt.format(calenda.getTime());
} catch (Exception ex) {
}
return yyyymmdd;
}
/**
* 다음달 구하기
*
* @param year : 년도 month : 달
* @return String
* @exception
*/
public static String nextMonthofYear(String yyyymm) {
String nextyear = "";
String nextmonth = "";
String nextyearmonth = "";
if (yyyymm.length() == 6) {
int year = Integer.parseInt(yyyymm.substring(0, 4));
int month = Integer.parseInt(yyyymm.substring(4));
if (month == 12) {
nextmonth = "01";
nextyear = String.valueOf(year + 1);
} else {
if ((month + 1) < 10) {
nextmonth = "0" + (month + 1);
} else {
nextmonth = String.valueOf(month + 1);
}
nextyear = String.valueOf(year);
}
nextyearmonth = nextyear + nextmonth;
return nextyearmonth;
} else {
return yyyymm;
}
}
/**
* xxx 구분자로 구분하여 토큰을 얻는다.
* @param str 문자열
* @param delim 구분자
* @return 토큰
*/
public static String[] getTokens(String str, String delim) {
StringTokenizer st = new StringTokenizer(str, delim);
int size = st.countTokens();
String[] tokens = new String[size];
for (int i = 0; st.hasMoreTokens(); i++) {
tokens[i] = st.nextToken();
}
return tokens;
}
/******추가***************EEE*************************************************/
/**
* 금액 표시
*
* @param num 금액
* @return String
* @exception
*/
public static String convType(double num) {
return NumberFormat.getInstance().format(num);
}
public static String convType(long num) {
return NumberFormat.getInstance().format(num);
}
public static String convType(int num) {
return NumberFormat.getInstance().format(num);
}
public static String convType(String str) {
return NumberFormat.getInstance().format(Double.parseDouble(str));
}
//double형 금액, 자리수 올림
public static String convType(double num, int pos) {
String str = "";
num = doRound(num, pos);
str = num + "";
//WAFLogger.debug("str == [" + str + "]");
//정수자리에 금액을 표시하는 ,를 추가한다.
str = convType(str);
str = strPoint(str, pos); //자리수조정..예: pos가 2인겨우 0.2 ===> 0.20으로
//str = convType( str );
return str;
//return NumberFormat.getInstance().format(num);
}
/**
* 0원인 경우 표시하지 않음
* @param num
* @param pos
* @return
*/
public static String convTypeNoZero(double num, int pos) {
String str = "";
num = doRound(num, pos);
str = num + "";
str = convType(str);
str = strPoint(str, pos); //자리수조정..예: pos가 2인겨우 0.2 ===> 0.20으로
if (num == 0) {
str = "";
}
return str;
}
/****************************************************************
--(2006-12-03 추가) 시작
--강묵 2006-12-03 기본관리 평형/약정관리 데이터 입력시 오류 처리를 위한 류진환의 요청으로 추가
****************************************************************/
public static String convType_house(double num, int pos) {
String str = "";
String pointRight = "";
num = doRound(num, pos);
str = num + "";
if (str.indexOf(".") != -1) //소수점이 존재하는 경우
{
pointRight = str.substring(str.indexOf("."), str.length()); // 소수점을 포함해서 소수점 이하 부분을 저장한다.
str = str.substring(0, str.indexOf(".")); // 소수점 이전 부분 즉 정수부분을 저장한다.
str = convType(str) + pointRight; // 정수부분에 금액을 표시하는 ,를 추가하고 저장해놓은 소수점 이하부분을 더하여 저장한다.
} else { // 소수점이 존재하지 않는 경우
str = convType(str);
}
str = strPoint(str, pos); //자리수조정..예: pos가 2인겨우 0.2 ===> 0.20으로
return str;
}
/****************************************************************
--(2006-12-03 추가) 끝
****************************************************************/
// 소수이하 절삭 함수
public static String convert(double doubleObj, String pattern)
throws Exception {
DecimalFormat df = new DecimalFormat(pattern);
return df.format(doubleObj).toString();
}
///////////////////////////////////////////////////////
//절삭(truncate) 메소드
//@param data 입력 데이터. double 타입.
//@param pos 절삭될 위치. int 타입
//@return 절삭된 결과. double 타입.
private static double[] lowUnits = { 1.0, 1.0E-1, 1.0E-2, 1.0E-3, 1.0E-4,
1.0E-5, 1.0E-6, 1.0E-7, 1.0E-8, 1.0E-9, 1.0E-10, 1.0E-11, 1.0E-12,
1.0E-13, 1.0E-14, 1.0E-15, 1.0E-16 };
private static double[] highUnits = { 1.0, 1.0E1, 1.0E2, 1.0E3, 1.0E4,
1.0E5, 1.0E6, 1.0E7, 1.0E8, 1.0E9, 1.0E10, 1.0E11, 1.0E12, 1.0E13,
1.0E14, 1.0E15, 1.0E16 };
public static double truncate(double data, int pos) {
if (pos == 0)
return Math.floor(data);
else if (pos > 0 && pos <= highUnits.length)
return lowUnits[pos] * Math.floor(data * highUnits[pos]);
else if (pos < 0 && pos >= -lowUnits.length)
return highUnits[-pos] * Math.floor(data * lowUnits[-pos]);
else
throw new RuntimeException(data
+ " cannot be truncated at the position " + pos);
}
///////////////////////////////////////////////////////
// 잘라내림(floor) 메소드
// @param data 입력 데이터. double 타입.
// @param pos 잘라내릴 위치. int 타입
// @return 잘라내린 결과. double 타입.
public static double floor(double data, int pos) {
if (data >= 0.0) {
if (pos == 0)
return Math.floor(data);
else if (pos > 0 && pos <= highUnits.length)
return lowUnits[pos] * Math.floor(data * highUnits[pos]);
else if (pos < 0 && pos >= -lowUnits.length)
return highUnits[-pos] * Math.floor(data * lowUnits[-pos]);
else
throw new RuntimeException(data
+ " cannot be floored at the position " + pos);
} else {
if (pos == 0)
return -Math.ceil(-data);
else if (pos > 0 && pos <= highUnits.length)
return lowUnits[pos] * -Math.ceil(-data * highUnits[pos]);
else if (pos < 0 && pos >= -lowUnits.length)
return highUnits[-pos] * -Math.ceil(-data * lowUnits[-pos]);
else
throw new RuntimeException(data
+ " cannot be truncated at the position " + pos);
}
}
///////////////////////////////////////////////////////
// 잘라올림(ceil) 메소드
// @param data 입력 데이터. double 타입.
// @param pos 잘라올릴 위치. int 타입
// @return 잘라올린 결과. double 타입.
public static double ceil(double data, int pos) {
if (data >= 0.0) {
if (pos == 0)
return Math.ceil(data);
else if (pos > 0 && pos <= highUnits.length)
return lowUnits[pos] * Math.ceil(data * highUnits[pos]);
else if (pos < 0 && pos >= -lowUnits.length)
return highUnits[-pos] * Math.ceil(data * lowUnits[-pos]);
else
throw new RuntimeException(data
+ " cannot be ceiled at the position " + pos);
} else {
if (pos == 0)
return -Math.floor(-data);
else if (pos > 0 && pos <= highUnits.length)
return lowUnits[pos] * -Math.floor(-data * highUnits[pos]);
else if (pos < 0 && pos >= -lowUnits.length)
return highUnits[-pos] * -Math.floor(-data * lowUnits[-pos]);
else
throw new RuntimeException(data
+ " cannot be floored at the position " + pos);
}
}
///////////////////////////////////////////////////////
// 반올림(round) 메소드
// @param data 입력 데이터. double 타입.
// @param pos 반올림할 위치. int 타입
// @return 반올림된 결과. double 타입.
public static double round(double data, int pos) {
if (data >= 0.0) {
if (pos == 0)
return Math.floor(data + 0.5);
else if (pos > 0 && pos <= highUnits.length)
return lowUnits[pos] * Math.floor(data * highUnits[pos] + 0.5);
else if (pos < 0 && pos >= -lowUnits.length)
return highUnits[-pos]
* Math.floor(data * lowUnits[-pos] + 0.5);
else
throw new RuntimeException(data
+ " cannot be floored at the position " + pos);
} else {
if (pos == 0)
return -Math.floor(-data + 0.5);
else if (pos > 0 && pos <= highUnits.length)
return lowUnits[pos]
* -Math.floor(-data * highUnits[pos] + 0.5);
else if (pos < 0 && pos >= -lowUnits.length)
return highUnits[-pos]
* -Math.floor(-data * lowUnits[-pos] + 0.5);
else
throw new RuntimeException(data
+ " cannot be truncated at the position " + pos);
}
}
public static String convertFloor(double doubleObj, int position)
throws Exception {
String temp = "";
String tempTwoDigit = "";
int inx = 0;
String patternAttachedZero = "";
String point = ".";
if (position < 0)
throw new Exception(" Position 을 0 이상으로 설정 하십시오 ");
if (position == 0)
point = ""; // 소수점이 포함되어 나타나는것 방지
// doubleObj : 0, 0.xxx 인 경우 오류 수정 2010.08.27 김영수.
temp = convert(doubleObj, "#0.0000000000000000000000000000000000");
// BigDecimal 에서 표현하는 소수점 가장 끝자리까지 이므로
//반올림되어 오류가 나는 소지를 최소화 한다.
inx = temp.lastIndexOf(".");
tempTwoDigit = temp.substring(0, ((inx + 1) + position));
for (int i = 0; i < position; i++) {
patternAttachedZero += "0";
}
return convert(Double.parseDouble(tempTwoDigit), "#,##0" + point
+ patternAttachedZero);
}
/**
* @param doubleObj
* @param position
* @return
* @throws Exception
*/
public static String convertFloorNoZero(double doubleObj, int position) throws Exception {
if (doubleObj == 0) {
return "";
} else {
String temp = "";
String tempTwoDigit = "";
int inx = 0;
String patternAttachedZero = "";
String point = ".";
if (position < 0)
throw new Exception(" Position 을 0 이상으로 설정 하십시오 ");
if (position == 0)
point = ""; // 소수점이 포함되어 나타나는것 방지
// doubleObj : 0, 0.xxx 인 경우 오류 수정 2010.08.27 김영수.
temp = convert(doubleObj, "#0.0000000000000000000000000000000000");
// BigDecimal 에서 표현하는 소수점 가장 끝자리까지 이므로
//반올림되어 오류가 나는 소지를 최소화 한다.
inx = temp.lastIndexOf(".");
tempTwoDigit = temp.substring(0, ((inx + 1) + position));
for (int i = 0; i < position; i++) {
patternAttachedZero += "0";
}
return convert(Double.parseDouble(tempTwoDigit), "#,##0" + point + patternAttachedZero);
}
}
/**
* 해당문자의 소숫점(int point까지)을 마추어준다.
* 2004-06-07 sukjin chang
* @param String str, int point
* @return String
* @exception
*/
public static String strPoint(String str, int point) {
if (str == null)
return "";
String zero = "0000000000";
if (str.equals(""))
str = "0";
if (str.indexOf(".") != -1) {
int p = str.indexOf(".");
str = str + zero;
str = str.substring(0, str.indexOf(".") + 1 + point);
} else {
str = str + "." + zero;
str = str.substring(0, str.indexOf(".") + 1 + point);
}
//2004-10-20 추가
if (point == 0)
str = str.substring(0, str.indexOf("."));
return str;
}
/**
* rate를 나타내는 format.
*
* @param pRate raw string
* @return formatted string
*/
public static String formatRate(String pRate, int pPost) {
String vReturn = null;
if (pRate == null)
return "";
if (pPost <= 0)
return pRate;
if (pRate.length() <= pPost)
return pRate;
int vIndex = pRate.length() - pPost;
vReturn = convType(pRate.substring(0, vIndex));
vReturn = vReturn + "." + pRate.substring(vIndex);
return vReturn;
}
/**
* 날짜 포맷 맞추기
* 2004-06-02 sukjin chang
* @param String str, String format
* @return String
* @exception
*/
public static String dateFormat(String str, String format) {
if (str == null)
return "";
str = str.trim();
if (str.length() == 6) {
return str.substring(0, 4) + format + str.substring(4);
} else if (str.length() == 8) {
return str.substring(0, 4) + format + str.substring(4, 6) + format
+ str.substring(6);
} else {
return str;
}
}
/**
* 시간 포맷 맞추기
* 2006-01-12 Sunwoo Park
* @param String str(HHMM)
* @return String
* @exception
*/
public static String timeFormat(String str) {
if (str == null)
return "";
str = str.trim();
if (str != null && str.length() == 4) {
return str.substring(0, 2) + ":" + str.substring(2, 4);
} else {
return "";
}
}
/**
* 금액에 -가 붙어있는 경우 ▼로 치환한다
* ,자릿수 콤마가 없다면 추가한다.
* @param str
* @param color
* @return
*/
public static String setNSymbol(String str, String color) {
int idx = str.indexOf("-");
//맨 앞에 minus 기호가 붙어있는 경우 ▼ 로 치환한다.
if (idx == 0) {
if (str.indexOf(",") == -1) {
str = convType(str);
}
//△ ▲ ▽ ▼
str = str.replace('-', '▼');
str = "" + str + "";
}
return str;
}
/**
* -금액의 경우 -제거후 색추가
* 2004-06-02 sukjin chang
* @param String str, String color
* @return String
* @exception
*/
public static String strColor(String str, String color) {
if (str == null)
return "";
if (str.indexOf("-") != -1) {
str = ""
+ StringUtil.replace(str, "-", "△") + "";
}
return str;
}
/**
* -금액의 경우 -제거후 색추가
* 2004-06-02 sukjin chang
* @param String str, String color
* @return String
* @exception
*/
public static String setColor(String str, String color) {
if (str == null)
return "";
str = "" + str + "";
return str;
}
/**
* -금액의 경우 -제거후 색추가
* 2004-06-02 sukjin chang
* @param String str, String color
* @return String
* @exception
*/
public static String setColor(String str, String color, String gubun) {
if (str == null)
return "";
if (gubun.equals("N"))
str = ""
+ StringUtil.replace(str, "-", "") + "";
else
str = "" + str + "";
return str;
}
/**
* 두 날짜를 비교하여 일수를 리턴한다.
* 2004-07-01 추가 sukjin chang
* @param dbDate 시작일
* @param inDate 끝일
* @return int
* @exception
*/
public static int getDays(String dbDate, String inDate) {
if ((dbDate == null || dbDate.equals("") || dbDate.length() != 8)
&& (inDate == null || inDate.equals("") || inDate.length() != 8)) {
return 0;
}
if (Integer.parseInt(dbDate) > Integer.parseInt(inDate))
return 0;
int dbyyyy = Integer.parseInt(dbDate.substring(0, 4));
int inyyyy = Integer.parseInt(inDate.substring(0, 4));
int dbmm = Integer.parseInt(dbDate.substring(4, 6));
int inmm = Integer.parseInt(inDate.substring(4, 6));
int dbdd = Integer.parseInt(dbDate.substring(6));
int indd = Integer.parseInt(inDate.substring(6));
int days = 0; // 그 해의 총 일수
if (inyyyy == dbyyyy) {
if (inmm == dbmm) {
days = indd - dbdd;
} else {
days += getMonOfDays(dbmm, dbyyyy) - dbdd; // 그달의 남은 일수 계산
dbmm++;
while (true) {
if (inmm == dbmm)
break;
days += getMonOfDays(dbmm, dbyyyy); // 중간 차이가 나는 달의 일수 계산
dbmm++;
} // end of while
days += indd; // 그달까지의 지나간 날짜 계산
} // end of if
} else {
int n_dbmm = dbmm;
for (int j = 0; j < (DAY_OF_MONTH - dbmm); j++) {
days += getMonOfDays(++n_dbmm, dbyyyy); // 남아있는 개월수의 날짜 총합
} // end of for
days += getMonOfDays(dbmm, dbyyyy) - dbdd;
dbyyyy++;
while (true) {
if (dbyyyy == inyyyy)
break;
for (int i = 1; i < 13; i++) {
days += getMonOfDays(i, dbyyyy);
} // end of for
dbyyyy++;
} // end of while
for (int j = 1; j < inmm; j++) {
days += getMonOfDays(j, inyyyy); // 남아있는 개월수의 날짜 총합
} // end of for
days += indd;
} // end of else
return days;
} // end of function
/**
* 그해 그달의 일수 구하기
* 2004-07-01 추가
* @param month 달
* @param year 년
* @return int
* @exception
*/
public static int getMonOfDays(int month, int year) {
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return (31);
case 4:
case 6:
case 9:
case 11:
return (30);
default:
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
return (29); // 2월 윤년계산을 위해서
else
return (28);
}
}
/**
* 금액 ""원일때 0 리턴
* @param cnt
* @return
*/
public static String space_Zero(String str) {
if (str.equals(""))
str = "0";
return str;
}
/**
* 금액 "0"원일때 "" 리턴
* @param cnt
* @return
*/
public static String Zero_space(String str) {
if (str.equals("0"))
str = "";
else if (str.equals("0.0"))
str = "";
else if (str.equals("0.00"))
str = "";
else if (str.equals("0.000"))
str = "";
return str;
}
public static String Zero_space(float flt) {
if (flt == 0)
return "";
return String.valueOf(flt);
}
public static String Zero_space(long lg) {
if (lg == 0)
return "";
return String.valueOf(lg);
}
public static String Zero_space(double db) {
if (db == 0)
return "";
return String.valueOf(db);
}
/**
* 문자열 제거
* @param src
* @param target
* @return
*/
/**
public static String removeString (String src, String target) {
return org.apache.commons.lang.StringUtils.remove (src, target);
}
public static boolean isNumeric(String src) {
return org.apache.commons.lang.StringUtils.isNumeric (src);
}
public static double toDouble (String src) {
return org.apache.commons.lang.math.NumberUtils.toDouble (src, 0);
}
public static float toFloat (String src) {
return org.apache.commons.lang.math.NumberUtils.toFloat (src, 0);
}
public static long toLong (String src) {
return org.apache.commons.lang.math.NumberUtils.toLong (src, 0);
}
public static int toInt (String src) {
return org.apache.commons.lang.math.NumberUtils.toInt (src, 0);
}
public static boolean isEmptyOrBlank (String src) {
return org.apache.commons.lang.StringUtils.isBlank (src) || org.apache.commons.lang.StringUtils.isEmpty (src) ;
}
*/
/**
* javascript escape로 유니코드로 변환된 문자열을 디코딩한다.
*
* @author cmlee
* @param uni javascript의 escape로 변환된 유니코드 문자열
* @return String
*/
public static String unescape(String uni) {
StringBuffer str = new StringBuffer();
for (int i = uni.indexOf("%u"); i > -1; i = uni.indexOf("%u")) {
str.append(uni.substring(0, i));
str.append(String.valueOf((char) Integer.parseInt(uni.substring(
i + 2, i + 6), 16)));
uni = uni.substring(i + 6);
}
str.append(uni);
return str.toString();
}
public static String[] getTokenArray(String str, String strDelim) {
if (str == null || str.length() == 0) {
String[] temp = { "" };
return temp;
}
StringTokenizer st = new StringTokenizer(str, strDelim);
if (st.countTokens() == 0) {
String[] arrToken = new String[1];
arrToken[0] = str;
return arrToken;
}
String[] arrToken = new String[st.countTokens()];
for (int i = 0; i < arrToken.length; i++)
arrToken[i] = st.nextToken().trim();
return arrToken;
}
static char[] chars = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
public static String getRandomString(int size) {
if (size < 1) {
return "";
}
String returnStr = "";
for (int i = 0; i < size; i++) {
returnStr += getRandomChar();
}
return returnStr;
}
public static char getRandomChar() {
return chars[(int) (Math.random() * 62)];
}
//skw 추가 2008.08.26
public static boolean isEmptyOrBlank(String src) {
return org.apache.commons.lang.StringUtils.isBlank(src)
|| org.apache.commons.lang.StringUtils.isEmpty(src);
}
//skw 추가 2008.08.26
public static int toInt(String src) {
return org.apache.commons.lang.math.NumberUtils.toInt(src, 0);
}
//skw 추가 2008.08.26
public static long toLong(String src) {
return org.apache.commons.lang.math.NumberUtils.toLong(src, 0);
}
//이형택 추가 2008/12/18
public static double toDouble(String src) {
return org.apache.commons.lang.math.NumberUtils.toDouble(src, 0);
}
// 이형택 추가 2008/12/18
public static float toFloat(String src) {
return org.apache.commons.lang.math.NumberUtils.toFloat(src, 0);
}
// 이형택 추가 2008/12/18
public static boolean isNumeric(String src) {
return org.apache.commons.lang.StringUtils.isNumeric (src);
}
//skw 추가 2008.10.02
public static String removeString (String src, String target) {
return org.apache.commons.lang.StringUtils.remove (src, target);
}
/**
* BigDecimal 형태로 변환하여 계산(곱하기)
* 2010-11-27 Giwan Choe
* @param Double src(곱할대상), Double src(곱할수)
* @return Double
* @exception
*/
public static double multiply(double src1, double src2) {
double returnVal = 0;
BigDecimal dcSrc1 = new BigDecimal(src1 + "");
BigDecimal dcSrc2 = new BigDecimal(src2 + "");
returnVal = dcSrc1.multiply(dcSrc2).doubleValue();
return returnVal;
}
/**
* BigDecimal 형태로 변환하여 계산(나누기)
* 2010-11-27 Giwan Choe
* @param Double src(나눌대상), Double src(나눌수)
* @return Double
* @exception
*/
public static double divide(double src1, double src2) {
double returnVal = 0;
BigDecimal dcSrc1 = new BigDecimal(src1 + "");
BigDecimal dcSrc2 = new BigDecimal(src2 + "");
returnVal = dcSrc1.divide(dcSrc2, 16, 6).doubleValue();
return returnVal;
}
/**
* BigDecimal 형태로 변환하여 계산(곱하기)
* 2010-11-27 Giwan Choe
* @param String src(곱할대상), String src(곱할수)
* @return Double
* @exception
*/
public static double multiply(String src1, String src2) {
double returnVal = 0;
BigDecimal dcSrc1 = new BigDecimal(src1);
BigDecimal dcSrc2 = new BigDecimal(src2);
returnVal = dcSrc1.multiply(dcSrc2).doubleValue();
return returnVal;
}
/**
* BigDecimal 형태로 변환하여 계산(나누기)
* 2010-11-27 Giwan Choe
* @param String src(나눌대상), String src(나눌수)
* @return Double
* @exception
*/
public static double divide(String src1, String src2) {
double returnVal = 0;
BigDecimal dcSrc1 = new BigDecimal(src1);
BigDecimal dcSrc2 = new BigDecimal(src2);
returnVal = dcSrc1.divide(dcSrc2, 16, 6).doubleValue();
return returnVal;
}
/**
* 마이너스, 소수점자리수가 있는 숫자형 문자열에 comma를 붙여주는 함수
* 2011-01-20 김영수
* @param amount 금액
* @return String 콤마가 붙인 숫자(-,소수점 자리수 포함)
* @throws Exception
*/
public static String addComma(String amount) throws Exception {
String[] dotPos = amount.split("\\.");
String sign = "";
String dotU = "";
String dotD = "";
dotU = dotPos[0];
if(dotU.indexOf("-") == 0) {
sign = dotU.substring(0, 1);
dotU = dotU.substring(1);
}
if(!PCMSUtil.isNumeric(dotU)) {
throw new Exception("숫자가 아납니다.");
}
if(dotPos.length == 2) {
dotD = dotPos[1];
}
int length = dotU.length();
int commaFlag = length%3;
String temp = "";
if(commaFlag > 0) {
temp = dotU.substring(0, commaFlag);
if (length > 3) {
temp += ",";
}
} else {
temp = "";
}
for (int i=commaFlag; i < length; i+=3) {
temp += dotU.substring(i, i+3);
if( i < (length-3)) {
temp += ",";
}
}
if(!"".equals(dotD)) {
amount = temp + "." + dotD;
} else {
amount = temp;
}
if("-".equals(sign)) {
amount = sign + amount;
}
return amount;
}
/**
* [설명]
* 시간 형식 변형
*
* @param string strTime
* @return string
*/
public static String setConvertTime(String strTime) {
if (strTime.length() == 6) {
return strTime.substring(0,2) + ":" + strTime.substring(2,4) + ":" + strTime.substring(4,6);
} else if (strTime.length() == 4) {
return strTime.substring(0,2) + ":" + strTime.substring(2,4);
} else {
return strTime;
}
}
/**
* [설명]
* 카드번호 형식 변형
*
* @param string strCardNum
* @return string
*/
public static String setConvertCard(String strCardNum) {
if (strCardNum.length() == 16) {
return strCardNum.substring(0,4) + "-" + strCardNum.substring(4,8) + "-" + strCardNum.substring(8,12) + "-" + strCardNum.substring(12,16);
} else {
return strCardNum;
}
}
}