import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* クラス名 :Format <br>
* 機能概要 :フォーマット系部品 <br>
*/
public class Format {
/**
* <p>時間フォーマット</p>
*/
private static ThreadLocal<SimpleDateFormat> timeFormat = new ThreadLocal<SimpleDateFormat>();
/**
* <p>日付(年月日・曜日・時間)フォーマット</p>
*/
private static ThreadLocal<SimpleDateFormat> longDateFormat = new ThreadLocal<SimpleDateFormat>();
//sxs start
/** カンマ編集のフォーマット */
private static final String FORMAT_KANMA = "##,###,###,###,##0.00";
//sxs end
/** 全角スペース */
private static final String strWideSpace = " ";
/** 半角スペース */
private static final String STRING_EMPTY = "";
/**
* <p>[機 能] フォーマット</p>
* <p>[説 明] Dateを文字列にフォーマットする。</p>
* <p>[備 考] dd形式にフォーマットする。</p>
* @param date 日付文字列
* @param format フォーマット
* @return String フォーマットされた文字列
*/
private static final String toDateString(Date date, SimpleDateFormat format){
try{
return format.format(date);
} catch(NullPointerException e){
return "";
} catch(IllegalArgumentException e){
return "";
}
}
//変換メソッド
//long,Integer,String
//カンマ編集
public static String addComma(long lnum) {
return new DecimalFormat(",###").format(lnum);
}
public static String addComma(String str) {
return new DecimalFormat(",###").format(stringToLong(str));
}
//カンマ削除
public static String delComma(String str) {
return str.replaceAll(",", "");
}
// Integer → String
public static String integerToString(Integer value){
return value.toString();
}
// String → Integer
public static Integer strToInteger(String value){
return new Integer((int)Long.valueOf(delComma(value)).longValue());
}
// String → long
public static long stringToLong(String value){
return Long.valueOf(delComma(value)).longValue();
}
// long → String
public static String longToString(long value){
return Long.toString(value);
}
// Integer → int
public static int integerToInt(Integer value){
return value.intValue();
}
// Integer → long
public static long integerToLong(Integer value){
return value.longValue();
}
// long → Integer
public static Integer longToInteger(long value){
return new Integer((int)value);
}
// Character → long
public static long characterToLong(Character value){
return Long.parseLong(value.toString());
}
/** YYYYMMDD(String) → YYYY年MM月DD日(String) */
public static String convDateStringChar(String value){
StringBuffer wrkReturn = new StringBuffer();
if(value.length() == 8){
wrkReturn.append(value.substring(0, 4) + "年");
wrkReturn.append(value.substring(4, 6) + "月");
wrkReturn.append(value.substring(6) + "日");
}else if(value.length() == 6){
wrkReturn.append(value.substring(0, 4) + "年");
wrkReturn.append(value.substring(4) + "月");
}else if(value.length() == 4){
wrkReturn.append(value.substring(0, 2) + "月");
wrkReturn.append(value.substring(2) + "日");
} else {
}
return wrkReturn.toString();
}
/** 郵便番號のハイフン編集 */
public static final String zipCodeAddHyphen(String zipCode){
StringBuffer returnZipCode = new StringBuffer();
if(4 <= zipCode.length()){
returnZipCode.append(zipCode.substring(0,3));
returnZipCode.append("-");
returnZipCode.append(zipCode.substring(3));
}
return returnZipCode.toString();
}
/** 郵便番號のハイフン削除 */
public static final String zipCodeDelHyphen(String zipCode){
return zipCode.replaceAll("-", "");
}
/** YYYY年MM月DD日(String) → YYYYMMDD(String) */
public static String convDateStringNum(String value){
return value.replaceAll("年", "").replaceAll("月", "").replaceAll("日", "");
}
/**
* <p>[機 能] 日付変換(日付→時刻)</p>
* <p>[説 明] Date型から時刻を表す文字列(HHmmss)への変換。</p>
* <p>[備 考] なし</p>
* @param time 日付文字列
* @return String フォーマットされた時刻文字列
*/
public static final String toTimeString(Date time) {
if (timeFormat.get() == null) {
SimpleDateFormat dateFormat = new SimpleDateFormat("HHmmss");
timeFormat.set(dateFormat);
}
return toDateString(time, timeFormat.get());
}
/**
* <p>[機 能] 日付変換(日付→文字列)</p>
* <p>[説 明] Date型から日付を表す文字列(yyyy/MM/dd HH:mm:ss)への変換。</p>
* <p>[備 考] yyyy/MM/dd HH:mm:ss形式にフォーマットする。</p>
* @param date 日付文字列
* @return String フォーマットされた文字列
*/
public static final String toDateStringLongDate(Date date){
if (longDateFormat.get() == null) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
longDateFormat.set(dateFormat);
}
return toDateString(date,longDateFormat.get());
}
/**
* <p>[機 能] アドゼロ,YYYYMMDD結合</p>
* <p>[説 明] YYYYMMDDの形式に結合。文字數が足らない場合、0を追加する</p>
* <p> パラメタのどれか1つがnullならばnullを返す。</p>
* <p>[備 考] なし</p>
* @param String 年
* @param String 月
* @param String 日
* @return String 結合された文字列(YYYYMMDD)
*/
public static final String toYYYYMMDD(String yyyy, String mm, String dd){
DecimalFormat mmDdFormat = new DecimalFormat("00");
StringBuffer strBuffer = new StringBuffer();
if("".equals(yyyy) || "".equals(mm) || "".equals(dd)){
return null;
}
// YYYYMMDD形式に結合
String yyyyMmDd = strBuffer.append(yyyy + mmDdFormat.format(stringToLong(mm)) + mmDdFormat.format(stringToLong(dd))).toString();
return yyyyMmDd;
}
/**
* <p>[機 能] 全角スペース変換</p>
* <p>[説 明] 文字列がnullおよび長さ=0の場合、全角空白を返す</p>
* <p>[備 考] なし</p>
* @param String 変換文字列
* @return String 空白文字列
*/
public static final String changeSpace(String strIn) {
if(strIn == null) {
return strWideSpace;
}
if("".equals(strIn.trim())) {
return strWideSpace;
}
return strIn;
}
/**
* <p>[機 能] 空文字変換</p>
* <p>[説 明] 文字列が全角空白の場合、空文字を返す</p>
* <p>[備 考] なし</p>
* @param String 空白文字列
* @return String 変換文字列
*/
public static final String reChangeSpace(String strIn) {
if(strWideSpace.equals(strIn)){
return "";
}
return strIn;
}
/**
* <p>[機 能] Null変換</p>
* <p>[説 明] 文字列が全角空白の場合、Nullを返す</p>
* <p>[備 考] なし</p>
* @param String 空白文字列
* @return String 変換文字列
*/
public static final String changeNull(String strIn) {
if(strWideSpace.equals(strIn)){
return null;
}
return strIn;
}
//sxs start
/**
* カンマ編集した金額を返す。<br>
* "(##,###,###,###,##0.##)"の形式で返す。<br>
* 入力金額がない場合は空文字を返す。<br>
* @param BigDecimal 金額
* @return カンマ編集した金額
*/
public static String numberFormat(BigDecimal bd) {
if (bd == null || STRING_EMPTY.equals(bd.toString())) {
return STRING_EMPTY;
}
DecimalFormat bf = new DecimalFormat(FORMAT_KANMA);
return bf.format(bd);
}
//sxs end
/** スレッドローカル(フォーマット文字列:カンマ) */
private static ThreadLocal<DecimalFormat> COMMA_FORMAT = new ThreadLocal<DecimalFormat>();
/**
* カンマ編集した値を返す。<br>
* 小數以下の値は、38桁まで有効
*
* @param str
* @return
*/
public static String numberFormat(String str) {
if (str == null || "".equals(str)) {
return str;
}
DecimalFormat decimalFormat = COMMA_FORMAT.get();
if (decimalFormat == null) {
decimalFormat = new DecimalFormat("##,###,###,###,##0");
decimalFormat.setMaximumFractionDigits(38);
COMMA_FORMAT.set(decimalFormat);
}
BigDecimal value = new BigDecimal(str);
return decimalFormat.format(value);
}
}