/*
 * MosP - Mind Open Source Project         http://www.mosp.jp/
 * Copyright (C) 1987-2008 MIND Co., Ltd.  http://www.e-mind.co.jp/
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
package jp.mosp.common;

import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import jp.mosp.common.common.KanaConvertUtility;
import jp.mosp.common.common.MospConst;
import jp.mosp.common.common.MospUtility;
import jp.mosp.common.CommonConst;

public class CommonUtility {
	
	/**
	 * StringのNull、長さチェック
	 * @param str		対象String
	 * @return
	 * <p>Nullもしくは長さが0の場合true、そうでない場合false</p>
	 */
	public boolean isNull(String str) {
		try {
			if (str == null || str.length() == 0) {
				return true;
			}
		} catch (NullPointerException e) {
			return true;
		}
		return false;
	}

	/**
	 * 配列→カンマ区切りの文字列
	 * @param array		対象一次元配列
	 * @return
	 */
	public String convArrayToFormattedByComma(String[] array) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < array.length; i++) {
			sb.append(array[i]);
			if (i != array.length -1) {
				sb.append(CommonConst.STR_UNDER_SEPARATOR);
			}
		}			
		return sb.toString();
	}

	/**
	 * 配列次元変換
	 * @param ary1D		変換元一次元配列
	 * @return	変換後二次元配列
	 */
	public String[][] convArrayDimension(String[] ary1D) {
		String[][] array = new String[1][2];
		array[0][0] = "";
		array[0][1] = "";
		if (ary1D != null) {
			array[0][0] = ary1D[0];
			array[0][1] = ary1D[1];
		}
		return array;
	}

	/**
	 * 配列次元変換
	 * @param ary2D		変換元二次元配列
	 * @return	変換後一次元配列
	 */
	public String[] convArrayDimension(String[][] ary2D) {
		String[] array = new String[2];
		array[0] = "";
		array[1] = "";
		if (ary2D != null) {
			array[0] = ary2D[0][0];
			array[1] = ary2D[0][1];
		}
		return array;
	}

	/**
	 * 一次元配列生成
	 * @param str1		対象要素１
	 * @param str2		対象要素２
	 * @return　生成配列
	 */
	public String[] createArray(String str1, String str2) {
		return new String[]{ str1, str2 };
	}
	
	/**
	 * 空白プルダウン取得
	 * @return  空白プルダウン用配列
	 */
	public String[][] getBlankArray() {
		String[][] array = new String[1][2];
		array[0][0] = "";
		array[0][1] = "";
		return array;
	}

	/**
	 * 在職/退職リスト取得
	 * @return 在職/退職リスト
	 */
	public String[][] getRetirementFlagArrayAll() {
		// 配列の作成
		return addArrayFirstRowSpace(getRetirementFlagArray());
	}

	/**
	 * 在職/退職リスト取得（空欄無し）
	 * @return 在職/退職リスト
	 */
	public String[][] getRetirementFlagArray() {
		// 配列の作成
		String[][] aryRetirementFlag = new String[3][2];
		aryRetirementFlag[0][0] = String.valueOf(CommonConst.RETIREMENT_FLAG_OFF);
		aryRetirementFlag[0][1] = CommonConst.NAM_RETIREMENT_OFF;
		aryRetirementFlag[1][0] = String.valueOf(CommonConst.RETIREMENT_FLAG_LEAVE);
		aryRetirementFlag[1][1] = CommonConst.NAM_RETIREMENT_LEAVE;
		aryRetirementFlag[2][0] = String.valueOf(CommonConst.RETIREMENT_FLAG_ON);
		aryRetirementFlag[2][1] = CommonConst.NAM_RETIREMENT_ON;
		return aryRetirementFlag;
	}

	/**
	 * 名称取得
	 * @param code  取得対象コード
	 * @return コード名称
	 */
	public String getCodeName(String code, String[][] array) {
		String codeName = code;
		if (array == null) {
			return codeName;
		}
		for (int i = 0; i < array.length; i++) {
			if (code.equals(array[i][0])) {
				codeName = array[i][1];
				break;
			}
		}
		return codeName;
	}

	/**
	 * コード取得
	 * @param name  取得対象コード
	 * @param array  取得対象配列
	 * @return コード名称
	 */
	public String getCodeValue(String name, String[][] array) {
		String codeValue = name;
		if (array == null) {
			return codeValue;
		}
		for (int i = 0; i < array.length; i++) {
			if (name.equals(array[i][1])) {
				codeValue = array[i][0];
				break;
			}
		}
		return codeValue;
	}

	/**
	 * 年プルダウン取得
	 * @param year 基準年
	 * @return 年プルダウン用文字列配列
	 */
	public String[][] getYearArray(int year) {
		String[][] aryYear = new String[3][2];
		aryYear[0][0] = String.valueOf(year - 1);
		aryYear[0][1] = String.valueOf(year - 1);
		aryYear[1][0] = String.valueOf(year);
		aryYear[1][1] = String.valueOf(year);
		aryYear[2][0] = String.valueOf(year + 1);
		aryYear[2][1] = String.valueOf(year + 1);
		return aryYear;
	}

	/**
	 * 年プルダウン取得
	 * @param year 基準年
	 * @param former 過去
	 * @param further 未来
	 * @return 年プルダウン用文字列配列
	 */
	public String[][] getYearArray(int year, int former, int further) {
		String[][] aryYear = new String[former + further + 1][2];
		int i = 0;
		int index = 0;
		for (i = year - former; i < year; i++) {
			aryYear[index][0] = String.valueOf(i);
			aryYear[index][1] = String.valueOf(i);
			index++;
		}
		aryYear[index][0] = String.valueOf(year);
		aryYear[index][1] = String.valueOf(year);
		index++;
		for (i = year + 1; i <= year + further; i ++) { 
			aryYear[index][0] = String.valueOf(i);
			aryYear[index][1] = String.valueOf(i);
			index++;
		}
		return aryYear;
	}

	/**
	 * 月プルダウン取得
	 * @return 月プルダウン用文字列配列
	 */
	public String[][] getMonthArray() {
		String[][] aryMonth = new String[12][2];
		for (int i = 0; i < 12; i++) {
			aryMonth[i][0] = String.valueOf(i + 1);
			aryMonth[i][1] = String.valueOf(i + 1);
		}
		return aryMonth;
	}

	/**
	 * 日プルダウン取得
	 * @return 月プルダウン用文字列配列
	 */
	public String[][] getDayArray() {
		String[][] aryDay = new String[31][2];
		for (int i = 0; i < 31; i++) {
			aryDay[i][0] = String.valueOf(i + 1);
			aryDay[i][1] = String.valueOf(i + 1);
		}
		return aryDay;
	}

	/**
	 * 時間プルダウン取得
	 * @param hour          開始時
	 * @param minute        開始分
	 * @param count         データ数
	 * @param interval      データ間隔(分)
	 * @param isValueMinute 分設定フラグ(true：valueは分単位、false：valueは時間文字列)
	 * @return 時間プルダウン用文字列配列
	 */
	public String[][] getTimeArray(int hour, int minute, int count, int interval, boolean isValueMinute) {
		String[][] aryTime = new String[count][2];
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.HOUR_OF_DAY, hour);
		cal.set(Calendar.MINUTE, minute);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		for (int i = 0; i < count; i++) {
			if (isValueMinute) {
				aryTime[i][0] = String.valueOf(cal.get(Calendar.HOUR_OF_DAY) * 60 + cal.get(Calendar.MINUTE));
			} else {
				aryTime[i][0] = MospUtility.getDateString(cal.getTime(), CommonConst.FORMAT_TIME_SHORT);
			}
			aryTime[i][1] = MospUtility.getDateString(cal.getTime(), CommonConst.FORMAT_TIME_SHORT);
			cal.add(Calendar.MINUTE, interval);
		}
		return aryTime;
	}

	/**
	 * 数値プルダウン取得
	 * @param start		開始値
	 * @param end		終了値
	 * @param interval	間隔
	 * @return 数値プルダウン用文字列配列
	 */
	public String[][] getCountArray(int start, int end, int interval) {
		int count = (end - start) / interval + 1;
		int value = start;
		String[][] aryCount = new String[count][2];
		for (int i = 0; i < count; i++) {
			aryCount[i][0] = String.valueOf(value);
			aryCount[i][1] = String.valueOf(value);
			value += interval;
		}
		return aryCount;
	}

	/**
	 * プルダウン行除去
	 * @param target 除去対象プルダウン配列
	 * @param value 除去対象行値
	 * @return 除去後プルダウン
	 */
	public String[][] removeArrayRow(String[][] target, String value) {
		int count = target.length;
		for (int i = 0; i < target.length; i++) {
			if (target[i][0].equals(value)) {
				--count;
			}
		}
		String[][] aryNew = new String[count][2];
		count = 0;
		for (int i = 0; i < target.length; i++) {
			if (target[i][0].equals(value)) {
				continue;
			}
			aryNew[count][0] = target[i][0];
			aryNew[count][1] = target[i][1];
			++count;
		}
		return aryNew;
	}

	/**
	 * プルダウンの先頭行に空白を追加
	 * @param target 対象プルダウン配列
	 * @return 追加後プルダウン
	 */
	public String[][] addArrayFirstRowSpace(String[][] target) {
		return addArrayFirstRowValue(target, "", "");
	}

	/**
	 * プルダウンの先頭行に任意の値を追加
	 * @param target 対象プルダウン配列
	 * @param code 対象行コード
	 * @param value 対象行表示値
	 * @return aryNew	生成配列
	 */
	public String[][] addArrayFirstRowValue(String[][] target, String code, String value) {
		String[][] aryNew = new String[target.length + 1][2];
		for (int i = 0; i < aryNew.length; i++) {
			if (i == 0) {
				aryNew[0][0] = code;
				aryNew[0][1] = value;
			} else {
				aryNew[i][0] = target[i - 1][0];
				aryNew[i][1] = target[i - 1][1];
			}
		}
		return aryNew;
	}

	/**
	 * プルダウンの最終行に任意の値を追加
	 * @param target 対象プルダウン配列
	 * @param code 対象行コード
	 * @param value 対象行表示値
	 * @return aryNew	生成配列
	 */
	public String[][] addArrayLastRowValue(String[][] target, String code, String value) {
		String[][] aryNew = new String[target.length + 1][2];
		for (int i = 0; i < aryNew.length; i++) {
			if (i == aryNew.length -1) {
				aryNew[i][0] = code;
				aryNew[i][1] = value;
			} else {
				aryNew[i][0] = target[i][0];
				aryNew[i][1] = target[i][1];
			}
		}
		return aryNew;
	}

	/**
	 * 二次元配列を一次元配列へ変換
	 * @param ary 対象二次元配列
	 * @param d 選択No.
	 * @return 選択一次元配列
	 * @throws Exception
	 */	
	public String[] separateArrayList(String[][] ary, int d) {
		String[] aryName = new String[ary.length];
		for (int i = 0; i < ary.length; i++) {
			aryName[i] = ary[i][d];
		}
		return aryName;
	}

	/**
	 * 月差取得
	 * @param date1 終了月
	 * @param date2 開始月
	 * @return 月差(date1 - date2)
	 * @throws Exception
	 */
	public int getMonthRemainder(Date date1, Date date2) {
		int year1  = MospUtility.getYear (date1);
		int month1 = MospUtility.getMonth(date1);
		int year2  = MospUtility.getYear (date2);
		int month2 = MospUtility.getMonth(date2);
		int remainder = year1 * 12 + month1 - year2 * 12 - month2;
		return remainder;
	}

	/**
	 * 日数取得
	 * @param date1 終了日
	 * @param date2 開始日
	 * @return 日数(date1 - date2)
	 * @throws Exception
	 */
	public long getDateRemainder(Date date1, Date date2) {
		long remainder = date1.getTime() - date2.getTime();
		return (remainder / (1000 * 60 * 60 * 24)) + 1;
	}

	/**
	 * 年操作
	 * @param date   操作日付
	 * @param amount 増減月数
	 * @return 操作後日付
	 */
	public Date addYear(Date date, int amount) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		cal.add(Calendar.YEAR, amount);
		return cal.getTime();
	}

	/**
	 * 月操作
	 * @param date   操作日付
	 * @param amount 増減月数
	 * @return 操作後日付
	 */
	public Date addMonth(Date date, int amount) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		cal.add(Calendar.MONTH, amount);
		return cal.getTime();
	}

	/**
	 * 日操作
	 * @param date   操作日付
	 * @param amount 増減日数
	 * @return 操作後日付
	 */
	public Date addDay(Date date, int amount) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		cal.add(Calendar.DAY_OF_MONTH, amount);
		return cal.getTime();
	}

	/**
	 * 日操作
	 * @param date   操作日付
	 * @param amount 増減日数
	 * @return 操作後日付
	 */
	public Date addDay(Date date, String amount) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		cal.add(Calendar.DAY_OF_MONTH, Integer.parseInt(amount));
		return cal.getTime();
	}

	/**
	 * 日付取得（String）
	 * @return 日付初期値
	 */
	public Date getInitialDate() { 
		Calendar cal = Calendar.getInstance();
		cal.setTime(new Date(0));
		return cal.getTime();
	}

	/**
	 * システム日付取得
	 * @return システム日付
	 */
	public Date getSystemDate() {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime();
	}

	/**
	 * システム日付取得
	 * @return システム日付
	 */
	public Date getNowDate() {
		Calendar cal = Calendar.getInstance();
		cal.setTime(new Date());
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime();
	}

	/**
	 * 月初日取得
	 * @param year  取得対象年
	 * @param month 取得対象月
	 * @return 月初日
	 */
	public Date getFirstDateOfMonth(String year, String month) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, Integer.parseInt(year));
		cal.set(Calendar.MONTH, Integer.parseInt(month) - 1);
		cal.set(Calendar.DAY_OF_MONTH, 1);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime();
	}

	/**
	 * 月初日取得
	 * @param year  取得対象年
	 * @param month 取得対象月
	 * @return 月初日
	 */
	public Date getFirstDateOfMonth(int year, int month) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.MONTH, month - 1);
		cal.set(Calendar.DAY_OF_MONTH, 1);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime();
	}

	/**
	 * 月最終日取得
	 * @param year  取得対象年
	 * @param month 取得対象月
	 * @return 月最終日
	 */
	public Date getLastDateOfMonth(String year, String month) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, Integer.parseInt(year));
		cal.set(Calendar.MONTH, Integer.parseInt(month));
		cal.set(Calendar.DAY_OF_MONTH, 1);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		cal.add(Calendar.DAY_OF_MONTH, -1);
		return cal.getTime();
	}

	/**
	 * 月最終日取得
	 * @param year  取得対象年
	 * @param month 取得対象月
	 * @return 月最終日
	 */
	public Date getLastDateOfMonth(int year, int month) {
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.MONTH, month);
		cal.set(Calendar.DAY_OF_MONTH, 1);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		cal.add(Calendar.DAY_OF_MONTH, -1);
		return cal.getTime();
	}

	/**
	 * 年月取得
	 * @param year  年
	 * @param month 月
	 * @return 年月
	 */
	public Date getYearMonth(String year, String month) {
		Calendar cal = Calendar.getInstance();
		cal.set(Integer.parseInt(year), Integer.parseInt(month) -1, 1, 0, 0, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime();
	}

	/**
	 * 時間取得
	 * @param time 時間
	 * @return 日付
	 * @throws ParseException 
	 */
	public Date getTimeAsDate(String time) throws ParseException {
		Date date = DateFormat.getTimeInstance(DateFormat.SHORT).parse(time);
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.YEAR, CommonConst.TIME_DEFAULT_YEAR);
		cal.set(Calendar.MONTH, CommonConst.TIME_DEFAULT_MONTH);
		cal.set(Calendar.DAY_OF_MONTH, CommonConst.TIME_DEFAULT_DAY);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime();
	}

	/**
	 * 選択日を含む一週間の開始日取得
	 * @param date			選択日
	 * @param dayofweek		開始曜日
	 * @return 選択日を含む一週間の開始日
	 */
	public Date getFirstDateOfTargetWeek(Date date, int dayofweek) {
		Calendar cal = Calendar.getInstance();
		cal.setFirstDayOfWeek(dayofweek);
		cal.setTime(date);
		cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
		return cal.getTime();
	}

	/**
	 * 選択日を含む一週間の終了日取得
	 * @param date			選択日
	 * @param dayofweek		開始曜日
	 * @return 選択日を含む一週間の終了日
	 */
	public Date getLastDateOfTargetWeek(Date date, int dayofweek) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(getFirstDateOfTargetWeek(date, dayofweek));
		cal.add(Calendar.DATE, 6);
		return cal.getTime();
	}

	/**
	 * ""付加
	 * @param data 付加対象データ
	 * @return 付加後文字列
	 */
	public String getCsvData(String data) {
		if (data == null) {
			return "";
		}
		String newData = data.replaceAll("\"", "\"\"");
		return "\"" + newData + "\"";
	}

	/**
	 * ""付加
	 * @param data 付加対象データ
	 * @return 付加後文字列
	 */
	public String getCsvData(int data) {
		return "\"" + String.valueOf(data) + "\"";
	}

	/**
	 * ""付加
	 * @param data 付加対象データ
	 * @return 付加後文字列
	 */
	public String getCsvData(float data) {
		return "\"" + String.valueOf(data) + "\"";
	}

	/**
	 * ""付加
	 * @param data 付加対象データ
	 * @return 付加後文字列
	 */
	public String getCsvData(Date data) {
		if (data == null) {
			return "";
		}
		String newData = MospUtility.getDateString(data, CommonConst.FORMAT_DATE);
		return "\"" + newData + "\"";
	}

	/**
	 * 郵便番号分離メソッド
	 * @param	code 郵便番号
	 * @return 前3桁
	 */
	public String divideYubinCodeForward(String code) {
		String[] ar = code.split(CommonConst.STR_SEPARATOR);
		if (ar.length > 0) {
			return ar[0];
		} else {
			return "";
		}	
	}

	/**
	 * 郵便番号分離メソッド
	 * @param	code 郵便番号
	 * @return 後4桁
	 */
	public String divideYubinCodeBackward(String code) {
		String[] ar = code.split(CommonConst.STR_SEPARATOR);
		if (ar.length > 1) {
			return ar[1];
		} else {
			return "";
		}
	}

	/**
	 * ハイフン分割メソッド
	 * @param code 対象データ
	 * @param hyphen ハイフン数
	 * @return 分割配列<br>
	 * ハイフンとハイフンの間に何も無い場合、
	 * 配列に「""」が代入される。
	 * 
	 */
	public String[] divideByHyphen(String code, int hyphen) {
		String[] base = code.split(CommonConst.FILE_NAME_SEPARATOR);
		String[] ar = new String[hyphen + 1];
		for (int i = 0; i < base.length; i++) {
			ar[i] = base[i];
		}
		for (int i = 0; i < ar.length; i++) {
			if (ar[i] == null) {
				ar[i] = "";
			}
		}
		return ar;
	}

	/**
	 * ハイフン分割メソッド
	 * @param code 対象データ
	 * @return 分割配列<br>
	 * ハイフンとハイフンの間に何も無い場合、
	 * 配列に「""」が代入される。<br>
	 * ハイフンで文字列が終わる場合、ハイフンの前の文字列までを、
	 * 配列にする。
	 */
	public String[] divideByHyphen(String code) {
		String[] base = code.split(CommonConst.FILE_NAME_SEPARATOR);
		String[] ar = new String[base.length];
		for (int i = 0; i < base.length; i++) {
			ar[i] = base[i];
		}
		for (int i = 0; i < ar.length; i++) {
			if (ar[i] == null) {
				ar[i] = "";
			}
		}
		return ar;
	}

	/**
	 * カンマ分割メソッド
	 * @param code 対象データ
	 * @param comma カンマ数
	 * @return 分割配列<br>
	 * カンマとカンマの間に何も無い場合、
	 * 配列に「""」が代入される。
	 * 
	 */
	public String[] divideByComma(String code, int comma) {
		String[] base = code.split(CommonConst.KEY_SEPARATOR);
		String[] ar = new String[comma + 1];
		for (int i = 0; i < base.length; i++) {
			ar[i] = base[i];
		}
		for (int i = 0; i < ar.length; i++) {
			if (ar[i] == null) {
				ar[i] = "";
			}
		}
		return ar;
	}

	/**
	 * カンマ分割メソッド
	 * @param code 対象データ
	 * @return 分割配列<br>
	 * カンマとカンマの間に何も無い場合、
	 * 配列に「""」が代入される。
	 */
	public String[] divideByComma(String code) {
		String[] base = code.split(CommonConst.KEY_SEPARATOR);
		String[] ar = new String[base.length];
		for (int i = 0; i < base.length; i++) {
			ar[i] = base[i];
		}
		for (int i = 0; i < ar.length; i++) {
			if (ar[i] == null) {
				ar[i] = "";
			}
		}
		return ar;
	}

	/**
	 * カンマ結合メソッド
	 * @param array		対象配列
	 * @return	string	結合文字列
	 */
	public String combineByComma(String[] array) {
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < array.length; i++) {
			sb.append(array[i]);
			if (i < array.length - 1) {
				sb.append(CommonConst.KEY_SEPARATOR);
			}			
		}
		return sb.toString();
	}

	/**
	 * スラッシュ分割メソッド
	 * @param code		対象コード
	 * @return　分割配列
	 */
	public String[] divideBySlash(String code) {
		String[] base = code.split(CommonConst.SEPARATOR_DATE);
		String[] ar = new String[base.length];
		for (int i = 0; i < base.length; i++) {
			ar[i] = base[i];
		}
		for (int i = 0; i < ar.length; i++) {
			if (ar[i] == null) {
				ar[i] = "";
			}
		}
		return ar;
	}

	/**
	 * スラッシュ分割メソッド
	 * @param code		対象コード
	 * @param slash		スラッシュ数
	 * @return　分割配列
	 */
	public String[] divideBySlash(String code, int slash) {
		String[] base = code.split(CommonConst.SEPARATOR_DATE);
		String[] ar = new String[slash + 1];
		for (int i = 0; i < base.length; i++) {
			ar[i] = base[i];
		}
		for (int i = 0; i < ar.length; i++) {
			if (ar[i] == null) {
				ar[i] = "";
			}
		}
		return ar;
	}

	/**
	 * nullに初期値をセット
	 * @param obj
	 * @param init
	 * @return	string 変換文字列
	 */
	public String convNullToInitialValue(Object obj, String init) {
		String value = init;
		if (obj == null) {
			return value;
		} else {
			return (String)obj;
		}
	}

	/**
	 * 勤務形態時刻変換メソッド
	 * @param start
	 * @param quit
	 * @return	string	結合文字列
	 */
	public String convWorkTypeTimes(int start, int quit) {
		StringBuffer sb = new StringBuffer();
		// 出勤時刻
		if ((start / 60) < 10) {
			sb.append("0");
		}
		sb.append(String.valueOf(start / 60));
		sb.append(CommonConst.STR_TIME_SEPARATOR);
		if ((start % 60) < 10) {
			sb.append("0");
		}
		sb.append(String.valueOf(start % 60));
		sb.append(CommonConst.STR_SLASH_SEPARATOR);
		// 退社時刻
		int quith = (quit / 60);
		if (quith > 24) {
			sb.append(CommonConst.NAM_NEXT);
			quith = quith - 24;
		}
		if (quith < 10) {
			sb.append("0");
		}
		sb.append(String.valueOf(quith));
		sb.append(CommonConst.STR_TIME_SEPARATOR);
		if ((quit % 60) < 10) {
			sb.append("0");
		}
		sb.append(String.valueOf(quit % 60));
		return sb.toString();
	}

	/**
	 * int時刻の時間をString時に変換
	 * @param time
	 * @return	string	時間（時）
	 */
	public String convIntegerTimeToStringHour(int time) {
		return String.valueOf(time / 60);
	}

	/**
	 * int時刻の分をString分に変換
	 * @param time
	 * @return	string	時間（分）
	 */
	public String convIntegerTimeToStringMinutes(int time) {
		return String.valueOf(time % 60);
	}

	/**
	 * String時刻の時間をString時に変換
	 * @param time HH:MM
	 * @return HH
	 */
	public String convStringTimeToStringHour(String time) {
		if (time.equals("")) {
			return "0";
		} else {
			return convIntegerTimeToStringHour(convStringTimeToIntegerTime(time));
		}
	}

	/**
	 * String時刻の分をString分に変換
	 * @param time HH:MM
	 * @return MM
	 */
	public String convStringTimeToStringMinutes(String time) {
		if (time.equals("")) {
			return "0";
		} else {
			return convIntegerTimeToStringMinutes(convStringTimeToIntegerTime(time));
		}
	}

	/**
	 * 時刻変換（int→String）
	 * @param time int
	 * @return HH:MM
	 */
	public String convIntegerTimeToStringTime(int time) {
		StringBuffer sb = new StringBuffer();
		if (convIntegerTimeToStringHour(time).length() < 2) {
			sb.append("0");
		}
		sb.append(convIntegerTimeToStringHour(time));
		sb.append(CommonConst.STR_TIME_SEPARATOR);
		if (convIntegerTimeToStringMinutes(time).length() < 2) {
			sb.append("0");			
		}
		sb.append(convIntegerTimeToStringMinutes(time));
		return sb.toString();
	}

	/**
	 * 時刻変換（int→String）
	 * @param time int
	 * @return HH時MM分
	 */
	public String convIntegerTimeToJPTime(int time) {
		StringBuffer sb = new StringBuffer();
		if (convIntegerTimeToStringHour(time).length() < 2) {
			sb.append("0");
		}
		sb.append(convIntegerTimeToStringHour(time));
		sb.append(CommonConst.NAM_HOUR);
		if (convIntegerTimeToStringMinutes(time).length() < 2) {
			sb.append("0");			
		}
		sb.append(convIntegerTimeToStringMinutes(time));
		sb.append(CommonConst.NAM_MINUTES);
		return sb.toString();
	}

	/**
	 * 時刻変換（String→int）
	 * @param time 時刻（HH:MM）
	 * @return int	時刻（0時からの経過分数）
	 */
	public int convStringTimeToIntegerTime(String time) {
		int inttime = 0;
		if (time.length() == 0) {
			time = "0:0";
		}
		String[] ar = time.split(CommonConst.STR_TIME_SEPARATOR);
		inttime = Integer.parseInt(ar[0]) * 60 + Integer.parseInt(ar[1]);
		return inttime;
	}

	/**
	 * 時刻変換（String→int）
	 * @param hour 時
	 * @param min 分
	 * @return int	時刻（0時からの経過分数）
	 */
	public int convStringTimeToIntegerTime(String hour, String min) {
		if (hour.equals("")) {
			hour = "0";
		}
		if (min.equals("")) {
			min = "0";
		}		
		int times = (Integer.parseInt(hour) * 60) + Integer.parseInt(min);
		return times;
	}

	/**
	 * 時刻変換（String→String）
	 * @param hour 時
	 * @param min 分
	 * @return	HH:mm
	 */
	public String convStringTimeFormatted(String hour, String min) {
		StringBuffer sb = new StringBuffer();
		if (hour.equals("")) {
			hour = "0";
		}
		if (hour.length() < 2) {
			hour = "0" + hour;
		}
		sb.append(hour);
		sb.append(CommonConst.STR_TIME_SEPARATOR);
		if (min.equals("")) {
			min = "0";
		}		
		if (min.length() < 2) {
			min = "0" + min;
		}
		sb.append(min);
		return sb.toString();
	}

	/**
	 * 時間変換（int→double）
	 * @param time int
	 * @return hh.mm <br>分はそのまま
	 * 				[例] 65分→1.05
	 */
	public double convIntegerTimeToDoubleTime(int time) {
		double dblhour = Math.floor((double)time / 60);
		double dblmin =(double)time % 60 / 100;
		double dtime = dblhour + dblmin;
		return dtime;
	}

	/**
	 * 時間変換（int→String）
	 * <p>[例] 90分→1.5</p>
	 * <p>15分単位の場合のみ利用してください。</p>
	 * @param time int
	 * @return hh.mm 
	 */
	public String convIntegerMinToStringHour(int time) {
		double dblhour = Math.floor((double)time / 60);
		double dblmin = (double)time % 60 / 60;
		double dtime = dblhour + dblmin;
		return String.valueOf(dtime);
	}

	/**
	 * 時間変換（int→String）
	 * @param time int
	 * @return HH時間MM分
	 */
	public String convIntegerTimeToJPHours(int time) {
		StringBuffer sb = new StringBuffer();
		sb.append(convIntegerTimeToStringHour(time));
		sb.append(CommonConst.NAM_COMMON_TIME);
		if (convIntegerTimeToStringMinutes(time).length() < 2) {
			sb.append("0");			
		}
		sb.append(convIntegerTimeToStringMinutes(time));
		sb.append(CommonConst.NAM_MINUTES);
		return sb.toString();
	}

	/**
	 * m_code用時刻コード生成メソッド
	 * @param h1
	 * @param m1
	 * @param h2
	 * @param m2
	 * @return	string	結合文字列
	 */
	public String convStringToTimeCode(String h1, String m1, String h2, String m2) {
		StringBuffer sb = new StringBuffer();
		if (h1.length() < 2) {
			sb.append("0");
		}
		sb.append(h1);
		sb.append(CommonConst.STR_TIME_SEPARATOR);
		if (m1.length() < 2) {
			sb.append("0");
		}
		sb.append(m1);
		sb.append(CommonConst.SEPARATOR_DATE);
		if (h2.length() < 2) {
			sb.append("0");
		}
		sb.append(h2);
		sb.append(CommonConst.STR_TIME_SEPARATOR);
		if (m2.length() < 2) {
			sb.append("0");
		}
		sb.append(m2);
		sb.append(CommonConst.SEPARATOR_DATE);
		return sb.toString();
	}

	/**
	 * 日付変換(int→String[])
	 * @param date 対象日付
	 * @return 日付配列
	 */
	public String[] convIntegerDateToArray(int date) {
		String[] arDate = new String[3];
		if (date > 19000101) {
			String strDate = String.valueOf(date);
			arDate[0] = strDate.substring(0, 4);
			arDate[1] = String.valueOf(Integer.parseInt(strDate.substring(4, 6)));
			arDate[2] = String.valueOf(Integer.parseInt(strDate.substring(6, 8)));
		} else {
			arDate[0] = "1900";
			arDate[1] = "01";
			arDate[2] = "01";
		}
		return arDate;
	}

	/**
	 * 日付変換(int→String)
	 * @param date 対象日付
	 * @return yyyy年mm月dd日
	 */
	public String convIntegerDateToString(int date) {
		StringBuffer sb = new StringBuffer();
		String[] ar = convIntegerDateToArray(date);
		sb.append(ar[0]);
		sb.append(CommonConst.NAM_YEAR);
		sb.append(ar[1]);
		sb.append(CommonConst.NAM_MONTH);
		sb.append(ar[2]);
		sb.append(CommonConst.NAM_DAY);
		return sb.toString();
	}

	/**
	 * 日付変換(int→String)
	 * @param date 対象日付
	 * @return yyyy/mm/dd
	 */
	public String convIntegerDateToStringFormatted(int date) {
		StringBuffer sb = new StringBuffer();
		String[] ar = convIntegerDateToArray(date);
		sb.append(ar[0]);
		sb.append(CommonConst.SEPARATOR_DATE);
		sb.append(ar[1]);
		sb.append(CommonConst.SEPARATOR_DATE);
		sb.append(ar[2]);
		return sb.toString();
	}

	/**
	 * 日付変換(String→int)
	 * @param yyyy 年
	 * @param mm 月
	 * @param dd 日
	 * @return yyyymmdd
	 */
	public int convStringDateToInteger(String yyyy, String mm, String dd) {
		return Integer.parseInt(yyyy) * 10000 + Integer.parseInt(mm) * 100 	+ Integer.parseInt(dd);
	}

	/**
	 * 日付変換(String→int)
	 * @param yyyy-mm-dd
	 * @return yyyymmdd
	 */
	public int convStringDateToInteger(String yyyymmdd) {
		int date = 0;
		String day[] = divideByHyphen(yyyymmdd);		
		date = convStringDateToInteger(day[0], day[1], day[2]);
		return date;		
	}

	/**
	 * 日付変換(int→String)
	 * @param yyyy
	 * @param mm
	 * @param dd
	 * @return	string	日付（yyyymmdd）
	 */
	public String convIntegerToStringDate(int yyyy, int mm, int dd) {
		return String.valueOf((yyyy * 10000) + (mm * 100) + dd);
	}

	/**
	 * 日付変換(Date→int)
	 * @param date
	 * @return yyyymmdd
	 */
	public int convDateToInteger(Date date) {
		return MospUtility.getYear(date) * 10000 + MospUtility.getMonth(date) * 100 + MospUtility.getDay(date);
	}

	/**
	 * 日付変換(Date→String)
	 * @param date
	 * @return yyyymmdd
	 */
	public String convDateToString(Date date) {
		return String.valueOf(convDateToInteger(date));
	}

	/**
	 * 日付変換(Date→String)
	 * @param date
	 * @return yyyy-mm
	 */
	public String convDateToStringYearMonth(Date date) {
		StringBuffer sb = new StringBuffer();
		sb.append(MospUtility.getYear(date));
		sb.append(CommonConst.FILE_NAME_SEPARATOR);
		if (MospUtility.getMonth(date) < 10) {
			sb.append(CommonConst.NAM_COMMON_INTEGER_INITIAL_VALUE);
		}
		sb.append(MospUtility.getMonth(date));
		return sb.toString();
	}

	/**
	 * 日付変換(Date→String)
	 * @param date
	 * @return yyyy-m
	 */
	public String convDateToStringYearMonthShort(Date date) {
		StringBuffer sb = new StringBuffer();
		sb.append(MospUtility.getYear(date));
		sb.append(CommonConst.FILE_NAME_SEPARATOR);
		sb.append(MospUtility.getMonth(date));
		return sb.toString();
	}

	/**
	 * 日付変換(Date→String)
	 * @param date
	 * @return yyyy-mm-dd
	 */
	public String convDateFormattedByHyphen(Date date) {
		StringBuffer sb = new StringBuffer();
		sb.append(MospUtility.getYear(date));
		String mm = String.valueOf(MospUtility.getMonth(date));
		if (mm.length() < 2) {
			mm = "0" + mm;
		}
		sb.append(CommonConst.FILE_NAME_SEPARATOR);
		sb.append(mm);
		sb.append(CommonConst.FILE_NAME_SEPARATOR);
		String dd = String.valueOf(MospUtility.getDay(date));
		if (dd.length() < 2) {
			dd = "0" + dd;
		}
		sb.append(dd);
		return sb.toString();
	}

	/**
	 * 日付変換(Date→String)
	 * @param date
	 * @return yyyy/mm/dd
	 */
	public String convDateFormatted(Date date) {
		StringBuffer sb = new StringBuffer();
		sb.append(MospUtility.getYear(date));
		String mm = String.valueOf(MospUtility.getMonth(date));
		if (mm.length() < 2) {
			mm = "0" + mm;
		}
		sb.append(CommonConst.SEPARATOR_DATE);
		sb.append(mm);
		sb.append(CommonConst.SEPARATOR_DATE);
		String dd = String.valueOf(MospUtility.getDay(date));
		if (dd.length() < 2) {
			dd = "0" + dd;
		}
		sb.append(dd);
		return sb.toString();
	}

	/**
	 * 日付変換(Date→String)
	 * @param date
	 * @return yyyy,mm,dd
	 */
	public String convDateFormattedByComma(Date date) {
		StringBuffer sb = new StringBuffer();
		sb.append(MospUtility.getYear(date));
		String mm = String.valueOf(MospUtility.getMonth(date));
		if (mm.length() < 2) {
			mm = "0" + mm;
		}
		sb.append(MospConst.DATA_SEPARATOR);
		sb.append(mm);
		sb.append(MospConst.DATA_SEPARATOR);
		String dd = String.valueOf(MospUtility.getDay(date));
		if (dd.length() < 2) {
			dd = "0" + dd;
		}
		sb.append(dd);
		return sb.toString();
	}

	/**
	 * 日付変換(Date→String)
	 * @param date	date
	 * @return yyyy年MM月dd日
	 */
	public String convDateToFormatDateJP(Date date) {
		return MospUtility.getDateString(date, CommonConst.FORMAT_DATE_JP);
	}

	/**
	 * 日付変換(Date→String)
	 * @param date	date
	 * @return yyyy年M月d日
	 */
	public String convDateToFormatDateJPShort(Date date) {
		return MospUtility.getDateString(date, CommonConst.FORMAT_DATE_JP_SHORT);
	}

	/**
	 * 日付変換(String→String)
	 * @param yyyy 年
	 * @param mm 月
	 * @param dd 日
	 * @return yyyy/mm/dd
	 */
	public String convStringDateFormatted(String yyyy, String mm, String dd) {
		StringBuffer sb = new StringBuffer();
		sb.append(yyyy);
		if (mm.length() < 2) {
			mm = "0" + mm;
		}
		sb.append(CommonConst.SEPARATOR_DATE);
		sb.append(mm);
		sb.append(CommonConst.SEPARATOR_DATE);
		if (dd.length() < 2) {
			dd = "0" + dd;
		}
		sb.append(dd);
		return sb.toString();
	}

	/**
	 * 日付変換(String→String)
	 * @param yyyy 年
	 * @param mm 月
	 * @param dd 日
	 * @return yyyy,mm,dd
	 */
	public String convStringDateFormattedByComma(String yyyy, String mm, String dd) {
		StringBuffer sb = new StringBuffer();
		sb.append(yyyy);
		if (mm.length() < 2) {
			mm = "0" + mm;
		}
		sb.append(MospConst.DATA_SEPARATOR);
		sb.append(mm);
		sb.append(MospConst.DATA_SEPARATOR);
		if (dd.length() < 2) {
			dd = "0" + dd;
		}
		sb.append(dd);
		return sb.toString();
	}

	/**
	 * 日付変換(String→String)
	 * @param yyyy 年
	 * @param mm 月
	 * @param dd 日
	 * @return yyyy-mm-dd
	 */
	public String convStringDateFormattedByHyphen(String yyyy, String mm, String dd) {
		StringBuffer sb = new StringBuffer();
		sb.append(yyyy);
		if (mm.length() < 2) {
			mm = "0" + mm;
		}
		sb.append(CommonConst.FILE_NAME_SEPARATOR);
		sb.append(mm);
		sb.append(CommonConst.FILE_NAME_SEPARATOR);
		if (dd.length() < 2) {
			dd = "0" + dd;
		}
		sb.append(dd);
		return sb.toString();
	}

	/**
	 * 日付変換(int→String)
	 * @param yyyy 年
	 * @param mm 月
	 * @param dd 日
	 * @return yyyy-mm-dd
	 */
	public String convDateFormattedByHyphen(int yyyy, int mm, int dd) {
		StringBuffer sb = new StringBuffer();
		sb.append(yyyy);
		sb.append(CommonConst.FILE_NAME_SEPARATOR);
		sb.append(addZero(mm));
		sb.append(CommonConst.FILE_NAME_SEPARATOR);
		sb.append(addZero(dd));
		return sb.toString();
	}

	/**
	 * 日付変換（String→Date）
	 * @param yyyymmdd	yyyy/mm/dd
	 * @return date
	 */
	public Date convStringDateToDate(String yyyymmdd) {
		Date date;
		try {
			date = new SimpleDateFormat(CommonConst.FORMAT_DATE).parse(yyyymmdd);
		} catch (ParseException e) {
			return null;
		}
		return date;
	}

	/**
	 * 日付変換（String→Date）
	 * @param yyyymmdd yyyyMMdd
	 * @return date
	 */
	public Date convStringBaseDateToDate(String yyyymmdd) {
		Date date;
		try {
			date = new SimpleDateFormat(CommonConst.FORMAT_DATE_BASE).parse(yyyymmdd);
		} catch (ParseException e) {
			return null;
		}
		return date;
	}

	/**
	 * 日付変換(String→String[])
	 * @param yyyymmdd 対象日付(yyyy/mm/dd)
	 * @return 日付配列
	 */
	public String[] convStringDateToArray(String yyyymmdd) {
		String[] arDate = new String[3];
		if (yyyymmdd.equals("")) {
			for (int i = 0; i < 3; i++) {
				arDate[i] = "";
			}
		} else {
			arDate[0] = removeZero(yyyymmdd.split(CommonConst.SEPARATOR_DATE)[0]);
			arDate[1] = removeZero(yyyymmdd.split(CommonConst.SEPARATOR_DATE)[1]);
			arDate[2] = removeZero(yyyymmdd.split(CommonConst.SEPARATOR_DATE)[2]);
		}
		return arDate;
	}

	/**
	 * 日付変換（int→Date）
	 * @param yyyymmdd
	 * @return date
	 */
	public Date convIntegerDateToDate(int yyyymmdd) {
		Date date;
		try {
			date = new SimpleDateFormat(CommonConst.FORMAT_DATE)
			.parse(convIntegerDateToStringFormatted(yyyymmdd));
		} catch (ParseException e) {
			return null;
		}
		return date;
	}

	/**
	 * 日付変換(int→Date)
	 * @param year
	 * @param month
	 * @param day
	 * @return	Date	対象年月日
	 */
	public Date getDate(int year, int month, int day) {
		Calendar cal = Calendar.getInstance();
		cal.set(year, month - 1, day);
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime(); 
	}

	/**
	 * 日付変換(String→Date)
	 * @param year
	 * @param month
	 * @param day
	 * @return	Date	対象年月日
	 */
	public Date getDate(String year, String month, String day) {
		Calendar cal = Calendar.getInstance();
		cal.set(Integer.parseInt(year), Integer.parseInt(month) - 1, Integer.parseInt(day));
		cal.set(Calendar.HOUR_OF_DAY, 0);
		cal.set(Calendar.MINUTE, 0);
		cal.set(Calendar.SECOND, 0);
		cal.set(Calendar.MILLISECOND, 0);
		return cal.getTime(); 
	}

	/**
	 * 日付変換（String→Date）
	 * @param yyyymmdd	yyyy-mm-dd
	 * @return date
	 */
	public Date convHyphenDateToDate(String yyyymmdd) {
		Date date;
		try {
			date = new SimpleDateFormat(CommonConst.FORMAT_FOR_ATTENDANCELIST).parse(yyyymmdd);
		} catch (ParseException e) {
			return null;
		}
		return date;
	}

	/**
	 * 日付変換（String→String）
	 * @param yyyymmdd	yyyy-mm-dd
	 * @return yyyy年M月d日
	 */
	public String convHyphenDateToJPShortDate(String yyyymmdd) {
		Date date = convHyphenDateToDate(yyyymmdd);
		return MospUtility.getDateString(date, CommonConst.FORMAT_DATE_JP_SHORT);
	}

	/**
	 * 日付変換（String→String）
	 * @param yyyymmdd	yyyy-mm-dd
	 * @return yyyy年MM月dd日
	 */
	public String convHyphenDateToJPDate(String yyyymmdd) {
		Date date = convHyphenDateToDate(yyyymmdd);
		return MospUtility.getDateString(date, CommonConst.FORMAT_DATE_JP);
	}

	/**
	 * 日付変換（String→String）
	 * @param yyyymmdd	yyyy-mm-dd
	 * @return yyyy/MM/dd
	 */
	public String convHyphenDateToFormatted(String yyyymmdd) {
		Date date = convHyphenDateToDate(yyyymmdd);
		return MospUtility.getDateString(date, CommonConst.FORMAT_DATE);
	}

	/**
	 * 日付変換（String→String）
	 * @param yyyymmdd	yyyy/mm/dd
	 * @return yyyy-MM-dd
	 */
	public String convFormattedToHyphen(String yyyymmdd) {
		Date date = convStringDateToDate(yyyymmdd);
		return convDateFormattedByHyphen(date);
	}

	/**
	 * 文字列を分割する
	 * @param Sspl1
	 * @param Sspl2
	 * @param Sspl3
	 * @return	分割文字列
	 */
	public static String splitStrings(String Sspl1, String Sspl2, int Sspl3) {
		if (Sspl1.length() > 0){
			if (Sspl1.indexOf(Sspl2) != -1)  {
				int i = Sspl1.indexOf(Sspl2);
				if (Sspl3 == 0) {
					return Sspl1.substring(0,i);
				} else {
					return Sspl1.substring(i+1,Sspl1.length());
				}
			} else {
				return Sspl1;
			}
		} else {
			return "";
		}
	}

	/**
	 * 日付取得（String）
	 * @return	9999-99-99 00:00:00
	 */
	public String getDateTime() { 
		StringBuffer datetime = new StringBuffer();
		SimpleDateFormat sdfymd = new SimpleDateFormat(CommonConst.FORMAT_DATE);
		SimpleDateFormat sdfhms = new SimpleDateFormat(CommonConst.FORMAT_TIME);
		datetime.append(sdfymd.format(getSystemDate()));
		datetime.append(" ");
		datetime.append(sdfhms.format(getSystemDate()));
		return datetime.toString();
	}

	/**
	 * 日付取得（String）
	 * @param date
	 * @return 9999-99-99 99:99:99
	 */
	public String getDateTime(Date date) { 
		StringBuffer datetime = new StringBuffer();
		SimpleDateFormat sdfymd = new SimpleDateFormat(CommonConst.FORMAT_DATE);
		SimpleDateFormat sdfhms = new SimpleDateFormat(CommonConst.FORMAT_TIME);
		datetime.append(sdfymd.format(date));
		datetime.append(" ");
		datetime.append(sdfhms.format(date));
		return datetime.toString();
	}

	/**
	 * フラグ変換（String→boolean）
	 * @param target 対象String
	 * @param trueflag trueを返す条件
	 * @param falseflag falseを返す条件
	 * @return 結果 どちらでもない場合false
	 */
	public boolean convFlagToBoolean(String target, String trueflag, String falseflag) {
		if (target.equals(trueflag)) {
			return true;
		} else if (target.equals(falseflag)) {
			return false;
		} else {
			return false;
		}
	}

	/**
	 * フラグ変換（String→boolean）
	 * @param target 対象String
	 * @param trueflag trueを返す条件
	 * @return 結果
	 */
	public boolean convFlagToBoolean(String target, String trueflag) {
		if (target.equals(trueflag)) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * フラグ変換（int→boolean）
	 * @param target 対象int
	 * @param trueflag trueを返す条件
	 * @return 結果
	 */
	public boolean convFlagToBoolean(int target, int trueflag) {
		if (target == trueflag) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * フラグ変換（boolean→String）
	 * @param isTrue 	trueの場合のString
	 * @param isFalse	falseの場合のString
	 * @param flag 		true or false
	 * @return	String 	判別名称
	 */
	public String returnStringFlag(String isTrue, String isFalse, boolean flag) {
		if (flag) {
			return isTrue;
		} else {
			return isFalse;
		}
	}

	/**
	 * フラグ変換（boolean→String）
	 * @param flag 	true or false
	 * @return true…OFF、false…ON
	 */
	public String returnTrueIsOff(boolean flag) {
		if (flag) {
			return CommonConst.NAM_COMMON_FLAG_OFF;
		} else {
			return CommonConst.NAM_COMMON_FLAG_ON;
		}
	}

	/**
	 * フラグ変換（boolean→String）
	 * @param flag 	true or false
	 * @return true…ON、false…OFF
	 */
	public String returnTrueIsOn(boolean flag) {
		if (flag) {
			return CommonConst.NAM_COMMON_FLAG_ON;
		} else {
			return CommonConst.NAM_COMMON_FLAG_OFF;
		}
	}

	/**
	 * 配列同士の結合
	 * @param frontarray 前方n行2列
	 * @param behindarray 後方n行2列
	 * @return	String[][]	結合配列
	 */
	public String[][] combineArray(String[][] frontarray, String[][] behindarray) {
		String[][] result = new String[frontarray.length + behindarray.length][2];
		System.arraycopy(frontarray, 0, result, 0, frontarray.length);
		System.arraycopy(behindarray, 0, result, frontarray.length, behindarray.length);			
		return result;
	}

	/**
	 * 配列同士の結合
	 * @param frontarray 前方n行2列
	 * @param centerarray 中間n行2列
	 * @param behindarray 後方n行2列
	 * @return	String[][]	結合配列
	 */
	public String[][] combineArray(String[][] frontarray, String[][] centerarray, String[][] behindarray) {
		String[][] result = combineArray(combineArray(frontarray, centerarray), behindarray);
		return result;
	}

	/**
	 * 配列同士の結合
	 * @param list
	 * @return
	 */
	public String[][] combineArray(List<String[][]> list) {
		String[][] result = new String[0][2];
		for (Iterator iter = list.iterator(); iter.hasNext();) {
			String[][] array = (String[][]) iter.next();
			result = combineArray(result, array);
		}
		return result.clone();
	}
	
	/**
	 * 有り／無しリスト
	 * @return [0]…無し、[1]…有り
	 */
	public String[][] getExistenceArray() {
		String[][] result = new String[2][2];
		result[0][0] = CommonConst.NAM_COMMON_FLAG_OFF;
		result[0][1] = CommonConst.NAM_COMMON_NASI;
		result[1][0] = CommonConst.NAM_COMMON_FLAG_ON;
		result[1][1] = CommonConst.NAM_COMMON_ARI;
		return result;
	}

	/**
	 * 有り／無しリスト
	 * @return [0]…無、[1]…有
	 */
	public String[][] getExistenceShortArray() {
		String[][] result = new String[2][2];
		result[0][0] = CommonConst.NAM_COMMON_FLAG_OFF;
		result[0][1] = CommonConst.NAM_MISSING_INPUT_OFF_OPT;
		result[1][0] = CommonConst.NAM_COMMON_FLAG_ON;
		result[1][1] = CommonConst.NAM_MISSING_INPUT_ON;
		return result;
	}

	/**
	 * 時間フォーマット
	 * @param hour 時間
	 * @return 時間(文字列)
	 */
	public String getHourString(double hour) {
		NumberFormat nf = NumberFormat.getNumberInstance();
		nf.setMaximumFractionDigits(2);
		nf.setMinimumFractionDigits(2);
		return nf.format(hour);
	}

	/**
	 * 数字フォーマット
	 * @param number 数字
	 * @param max 整数桁数
	 * @param min 小数点以下桁数
	 * @return 時間(文字列)
	 */
	public String getNumberString(double number, int max, int min) {
		NumberFormat nf = NumberFormat.getNumberInstance();
		nf.setMaximumFractionDigits(max);
		nf.setMinimumFractionDigits(min);
		return nf.format(number);
	}


	/**
	 * 改行表示処理
	 * @param aStr 改行対象文字列
	 * @return 改行後文字列
	 */
	public static String brHTML(String aStr) {
		char c;
		String strTarget = aStr != null ? aStr : "";
		StringBuffer returnStr = new StringBuffer();
		int length = strTarget.length();
		for (int i = 0; i < length; i++) {
			c = strTarget.charAt(i); 
			if (c == '\n') {
				returnStr = returnStr.append("<br>");
			} else if (c == '<') {
				returnStr = returnStr.append("&lt;");
			} else if(c == '>') {
				returnStr = returnStr.append("&gt;");
			} else if(c == '&') {
				returnStr = returnStr.append("&amp;");
			} else if(c == '"') {
				returnStr = returnStr.append("&quot;");
			} else if(c == '\'') {
				returnStr = returnStr.append("&#39;");
			} else {
				returnStr = returnStr.append(c);
			}
		}
		return new String(returnStr);
	}

	/**
	 * ゼロ付の数字から整数へ変換
	 * @param number ゼロ付数字
	 * @return 整数
	 */
	public String removeZero(String number) {
		return String.valueOf(Integer.parseInt(number));
	}

	/**
	 * 整数からゼロ付の数字へ変換
	 * @param number
	 * @return String	数字（0~9）→（00~09）
	 */
	public String addZero(int number) {
		StringBuffer sb = new StringBuffer();
		if (number < 10) {
			sb.append(CommonConst.NAM_COMMON_INTEGER_INITIAL_VALUE);
		}
		sb.append(number);
		return sb.toString();
	}

	/**
	 * 整数からゼロ付の数字へ変換
	 * @param number
	 * @return String	数字（0~9）→（00~09）
	 */
	public String addZero(String number) {
		StringBuffer sb = new StringBuffer();
		if (number.length() < 2) {
			sb.append(CommonConst.NAM_COMMON_INTEGER_INITIAL_VALUE);
		}
		sb.append(number);
		return sb.toString();
	}

	/**
	 * 名称存在チェック
	 * @param value			対象コード
	 * @param aryTarget		対象名称を含む配列
	 * @return
	 * <p>
	 * 名称が存在する場合true、そうでない場合false
	 * </p>
	 */
	public boolean checkNameExist(String value, String[][] aryTarget) {
		String target = getCodeName(value, aryTarget);
		if (target.equals(value)) {
			return false;
		}
		return true;
	}

	/**
	 * 同一配列チェック
	 * @param ary1		対象配列１
	 * @param ary2		対象配列２
	 * @return
	 * <p>
	 * 配列が一緒であればtrue、そうでない場合false
	 * </p>
	 */
	public boolean checkArraysEquals(String[] ary1, String[] ary2) {
		if (Arrays.equals(ary1, ary2)) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 仮名文字列を半角カナへ統一
	 * @param input		対象仮名文字列
	 * @return	半角カナ変換後文字列
	 */
	public String toHankakuKana(String input) {
		return KanaConvertUtility.convZenkakuToHankaku(KanaConvertUtility.convHiraGanaToHankaku(input));
	}

	/**
	 * 全角スペースを半角スペースへ変換
	 * @param input		全角スペースが含まれる文字列
	 * @return	全角スペースを半角スペースへ変換後の文字列
	 */
	public String to1byteSpace(String input) {
		StringBuffer sb = new StringBuffer();
		String[] aryInput = input.split("　");
		for (int i = 0; i < aryInput.length; i++) {
			sb.append(aryInput[i]);
			if (i != aryInput.length -1) {
				sb.append(CommonConst.NAM_COMMON_HALF_KANA_SPACE);
			}
		}
		return sb.toString();
	}

	/**
	 * 一次元配列をListへ
	 * @param array
	 * @return
	 */
	public List<String> arrayToList(String[] array) {
		List<String> list = new ArrayList<String>();
		for (int i = 0; i < array.length; i++) {
			list.add(array[i]);
		}
		return list;
	}
	
}
