/**
*
*/
package com.sbdc.util;
import java.text.DecimalFormat;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.*;
import java.io.*;
/**
* @author jchhkr
*
*/
public class EtcUtil {
public String checkNull(String pStr){
if(pStr == null || "NULL".equals(pStr.toUpperCase()))
return "";
else
return pStr;
}
public String checkNull(String pStr, String retStr){
if(pStr == null || "NULL".equals(pStr.toUpperCase()))
return retStr;
else
return pStr;
}
public int checkNull(String pStr, int pInt){
if(pStr == null || "".equals(pStr))
return pInt;
else
return Integer.parseInt(pStr);
}
public float checkNull(String pStr, float pInt){
if(pStr == null)
return pInt;
else
return Float.parseFloat(pStr);
}
public String getFomatDate(String strType, String strDate){
String delim = "";
if("1".equals(strType))
delim = "-";
else if("2".equals(strType))
delim = ".";
else if("3".equals(strType))
delim = "/";
if(strDate == null || "".equals(strDate)){
return "";
}else{
if(strDate.length() == 8){
return strDate.substring(0, 4) + delim + strDate.substring(4, 6) + delim + strDate.substring(6, 8);
}else{
return strDate;
}
}
}
// 로그파일 작성
public void writeLog(String who, String msg, String sql){
String LogDir = "D:/web_root/sbdc/log";
String writeStr = "";
writeStr = getTime() + " | " + who + " | " + msg;
//파일이 없을 경우 생성
String fileName = LogDir + "/sbdc_" +
getYear() + getMonth() + getDay() + ".log";
try{
makeFile(fileName);
File file = new File(fileName);
RandomAccessFile randomaccessfile = new RandomAccessFile(file, "rw");
long i = randomaccessfile.length();
randomaccessfile.seek(i);
randomaccessfile.write(writeStr.getBytes());
randomaccessfile.write("\n".getBytes());
randomaccessfile.close();
}catch(Exception e){
System.out.println("Write Log Error :::: " + e.toString());
}
}
public void makeFile(String fileName) throws Exception{
File file = new File(fileName);
if(!file.isFile()){
file.createNewFile();
}
}
//날짜와 시간 가져오기
public static String getYear(){
Calendar calendar = Calendar.getInstance();
return Integer.toString(calendar.get(Calendar.YEAR));
}
//현재 월 가져오기
public static String getMonth(){
Calendar now = Calendar.getInstance();
int monthN = now.get(Calendar.MONTH)+1;
String MON = (monthN<10)? "0"+Integer.toString(monthN):Integer.toString(monthN) ;
return MON;
}
//현재 일자 가져오기
public static String getDay(){
Calendar now = Calendar.getInstance();
int dayN = now.get(Calendar.DAY_OF_MONTH);
if(dayN <10){
return '0' + Integer.toString(dayN);
}
return Integer.toString(dayN);
}
public static String getDate(){ //년-월-일
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd");
return formatter.format(new java.util.Date());
}
public static String getTime(){ //년-월-일 시:분:초
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return formatter.format(new java.util.Date());
}
public static String getTime2(){ //시:분:초
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("HHmmss");
return formatter.format(new java.util.Date());
}
public static int getDateNum(){
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyyMMdd");
return Integer.parseInt(formatter.format(new java.util.Date()));
}
//한달전 일자 가져오기, sDay:현재일자 sMM:개월수(1은 1개월)
public String getLastMonth() {
Calendar cal = new GregorianCalendar();
String sDay = getTime().substring(0,10);
String sMM = "1";
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date d = df.parse(sDay, new ParsePosition(0));
cal.setTime(d);
cal.add(Calendar.MONTH, -Integer.parseInt(sMM));
return df.format(cal.getTime());
}
// 한달후 일자 가져오기, sDay:현재일자 sMM:개월수(1은 1개월)
public String getNextMonth() {
Calendar cal = new GregorianCalendar();
String sDay = getTime().substring(0,10);
String sMM = "1";
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date d = df.parse(sDay, new ParsePosition(0));
cal.setTime(d);
cal.add(Calendar.MONTH, Integer.parseInt(sMM));
return df.format(cal.getTime());
}
// 어제 일자 가져오기, sDay:현재일자 sMM:일수(1은 1일)
public String getLastDate() {
Calendar cal = new GregorianCalendar();
String sDay = getTime().substring(0,10);
String sMM = "1";
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date d = df.parse(sDay, new ParsePosition(0));
cal.setTime(d);
cal.add(Calendar.DATE, -Integer.parseInt(sMM));
return df.format(cal.getTime());
}
//두 날짜 차이값 비교, sDay:일자1 pDay:일자2
public long getDiffDate(String day1, String day2) {
long retVal = 0;
String sDay = day1;
String pDay = day2;
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date d1 = df.parse(sDay, new ParsePosition(0));
Date d2 = df.parse(pDay, new ParsePosition(0));
retVal = (d1.getTime() - d2.getTime()) / (1000*60*60*24);
return retVal;
}
/**
* 설명 한글코드처리
* @param --String s
* @return --String
* @exception
*/
public String convToKo(String s){
String retStr = "";
try{
if(s != null){
retStr = (new String(s.getBytes("8859_1"),"KSC5601"));
}
}catch (Exception e){
retStr = "";
}
return retStr;
}
// 파일명변경
public void setFilerename(String path, String filename_old, String filename_new){
//파일명 변경..
File ff = new File(path+"/"+filename_old);
if(ff.exists()){
File fileRename = new File(path+"/"+filename_new);
ff.renameTo(fileRename);
}
}
// 특수문자에 대해 HTML 형태로 변환
public String convToDB(String str) {
String tmpStr = "";
if(str == null){
str = "";
}
tmpStr = str.replaceAll(""", "\"");
tmpStr = tmpStr.replaceAll("<", "<");
tmpStr = tmpStr.replaceAll(">", ">");
tmpStr = tmpStr.replaceAll(" ", " ");
tmpStr = tmpStr.replaceAll("&", "&");
return tmpStr;
}
public String convToHtml(String str) {
String tmpStr = "";
if(str == null){
str = "";
}
tmpStr = str.replaceAll("\"", """);
tmpStr = tmpStr.replaceAll("<", "<");
tmpStr = tmpStr.replaceAll(">", ">");
tmpStr = tmpStr.replaceAll(" ", " ");
return tmpStr;
}
//파일 사이즈 가져오기
public String getFileSize(File file){
if(file.exists())
return Long.toString(file.length());
else
return "0";
}
//파일 확장자 가져오기
public String getFileExt(String filenm){
if(!"".equals(filenm))
return filenm.substring(filenm.lastIndexOf(".")+1);
else
return "";
}
//지정된 글자수를 초과한 문자열을 대체문자로 교체
public String getCutUTFString(String s, int len, String tail){
if (s == null)
return null;
int srcLen = s.getBytes().length;
if (srcLen < len)
return s;
String tmpTail = tail;
if (tail == null)
tmpTail = "";
int tailLen = tmpTail.getBytes().length;
if (tailLen > len)
return "";
char a;
int i = 0;
int realLen = 0;
for (i = 0; i < len - tailLen && realLen < len - tailLen; i++) {
a = s.charAt(i);
if ((a & 0xFF00) == 0)
realLen += 1;
else
realLen += 2;
}
while (s.substring(0, i).getBytes().length > len - tailLen) {
i--;
}
return s.substring(0, i) + tmpTail;
}
/**
* 스트링 자르기
* 지정한 정수의 개수 만큼 빈칸(" ")을 스트링을 구한다.
* 절단된 String의 바이트 수가 자를 바이트 개수를 넘지 않도록 한다.
*
* @param <str>원본 String
* @param <int>자를 바이트 개수
* @param <char>+1 or -1
* @return <String> 절단된 String
*/
public String cutString(String str, int length, char type)
{
byte[] bytes = str.getBytes();
int len = bytes.length;
int counter = 0;
if(length >= len)
{
StringBuffer sb = new StringBuffer();
sb.append(str);
for(int i=0;i<length-len;i++) sb.append(' ');
return sb.toString();
}
for(int i=length-1; i>=0; i--)
{
if(((int)bytes[i] & 0x80) != 0) counter++;
}
String result = null;
if(type == '+') result = new String(bytes, 0, length + (counter % 2));
else if(type == '-') result = new String(bytes, 0, length - (counter % 2));
else result = new String(bytes, 0, length - (counter % 2));
return result + "..";
}
public String covToDate(String str) {
String tmpStr = "";
String tmpArray[] = new String[3];
String retStr = "";
if(!"".equals(str) && !"null".equals(str) && str != null) {
tmpStr = str.replaceAll(" ", "");
tmpStr = tmpStr.replaceAll("[.]", "-");
tmpArray = tmpStr.split("-");
if(tmpArray[0].length() < 4) {
tmpArray[0] = "20" + tmpArray[0];
}
if(tmpArray[1].length() < 2) {
tmpArray[1] = "0" + tmpArray[1];
}
if(tmpArray[2].length() < 2) {
tmpArray[2] = "0" + tmpArray[2];
}
retStr = tmpArray[0] + "-" + tmpArray[1] + "-" + tmpArray[2];
}
return retStr;
}
//원본 문자를 구분자로 분해하여 배열을 리턴한다.
//전화번호, 팩스의 경우 - 구분으로 3개의 배열값을 갖도록 할 경우 사용
public String[] getSepStringArr(String tarVal, String sepVal, int arrLen){
String[] retStrArr = new String[arrLen];
String[] tarStrArr = tarVal.split(sepVal);
for(int i=0; i<arrLen; i++){
if(i>=tarStrArr.length){
retStrArr[i] = "";
}else{
retStrArr[i] = tarStrArr[i];
}
}
return retStrArr;
}
/**
* 문자열의 특수문자장 줄바꿈 Escape 문자열을 HTML 문서의 줄바꿈 태그("<br/>")로 변경
* 2007-07-16 김형섭 추가
*
* @param <String>input 변경할 문자열
* @return <String>"\r\n"과 "\r"이 "<br/>"로 치환된 문자열
*
*/
public String toLineBreak(String input)
{
return input.replaceAll("\r\n", "<br/>").replaceAll("\r", "<br/>");
}
public String toLine(String input)
{
return input.replaceAll("<br/>", "\r\n").replaceAll("<br/>", "\r");
}
/**
* 퍼센트를 계산
* 2007-07-17 김형섭 추가
*
* @param <int>decimalCount 소수점 자릿수
* @param <int>number 대상값
* @param <int>sum 합계값
* @return <float>퍼센트값
*
*/
public float getPercent(int decimalCount, int number, int sum)
{
return this.getPercent(decimalCount, (float)number, (float)sum);
}
/**
* 퍼센트를 계산
* 2007-07-17 김형섭 추가
*
* @param <int>decimalCount 소수점 자릿수
* @param <int>number 대상값
* @param <float>sum 합계값
* @return <float>퍼센트값
*
*/
public float getPercent(int decimalCount, int number, float sum)
{
return this.getPercent(decimalCount, (float)number, sum);
}
/**
* 퍼센트를 계산
* 2007-07-17 김형섭 추가
*
* @param <int>decimalCount 소수점 자릿수
* @param <float>number 대상값
* @param <int>sum 합계값
* @return <float>퍼센트값
*
*/
public float getPercent(int decimalCount, float number, int sum)
{
return this.getPercent(decimalCount, number, (float)sum);
}
/**
* 퍼센트를 계산
* 2007-07-17 김형섭 추가
*
* @param <int>decimalCount 소수점 자릿수
* @param <float>number 대상값
* @param <float>sum 합계값
* @return <float>퍼센트값
*
*/
public float getPercent(int decimalCount, float number, float sum)
{
float devidedNumber = 0f;
if(sum != (float)0) devidedNumber = number/sum;
return formatDecimal(decimalCount, devidedNumber * 100f);
}
/**
* 소수점 자릿수를 지정하여 변경
* 2007-07-17 김형섭 추가
*
* @param <int>decimalCount 소수점 자릿수
* @param <float>number 대상값
* @return <float>변경된값
*
*/
public float formatDecimal(int decimalCount, float number)
{
String pattern = "#.";
for(int i=0; i<decimalCount; i++)
{
pattern+= "0";
}
DecimalFormat dformat = new DecimalFormat(pattern);
return Double.valueOf(dformat.format(number)).floatValue();
}
/**
* 소수점 자릿수를 지정하여 변경
* 2007-07-17 김형섭 추가
*
* @param <int>decimalCount 소수점 자릿수
* @param <double>number 대상값
* @return <float>변경된값
*
*/
public float formatDecimal(int decimalCount, double number)
{
String pattern = "#.";
for(int i=0; i<decimalCount; i++)
{
pattern+= "0";
}
DecimalFormat dformat = new DecimalFormat(pattern);
return Double.valueOf(dformat.format(number)).floatValue();
}
/**
* 숫자를 받아 3자리마다 ,를 넣어 리턴
* 2007-07-27 정상욱 추가
*
* @param <String>변경할 수
* @return <String>변경된 값
*/
public String convToMoney(String strNumber) {
String Money = "";
if (strNumber == null) {
Money = "";
} else {
try{
float floatMoney = Float.parseFloat(strNumber);
java.text.DecimalFormat tstFormat = new java.text.DecimalFormat("#,###");
Money = tstFormat.format(floatMoney);
}catch(Exception e){
Money = strNumber;
}
}
return Money;
}
public String padStr (String orgStr, String direction, String repStr, int len) {
orgStr = checkNull(orgStr, "");
for(int i = 1; i <= len; i++){
if("L".equals(direction))
orgStr = repStr + orgStr;
else
orgStr = orgStr + repStr;
}
return orgStr;
}
/**
* 현재의 날짜를 스트링으로 리턴
* 2007/09/13 추가 (김형섭)
*
* @param <String>format 날짜포맷 (ex-yyyyMMdd)
* @return <String>날짜
*/
public String getCurrentDate(String format)
{
SimpleDateFormat formatter = new SimpleDateFormat(format, new Locale("ko", "KOREA"));
return formatter.format(new Date());
}
/**
* 지정한 자리수만큼 0을 채움
* 2007/09/13 추가 (김형섭)
*
* @param <int>sourceNumber 대상숫자
* @param <int>formatLength 자리수
* @return <String>날짜
*/
public String formatZeroString(int sourceNumber, int formatLength)
{
String sourceString = Integer.toString(sourceNumber);
String result = "";
for(int i=sourceString.length(); i<formatLength; i++) result+= '0';
return result + sourceString;
}
}