/*
* @(#)Common.java 1.x 01/xx/xx
*
* Copyright (c) 2016 CONFRAGE All rights reserved.
*
* Java1.7
*/
package jp.confrage;
import java.io.File;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.commons.lang.time.DateUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
public class Common{
/**
* プライベートコンストラクタ.<br>
* 不可視にします.<br>
*/
private Common() {
}
/**
* 文字列型の日付をDate型に変換します.<br>
* エラーの場合はParseExceptionをthrowします.<br>
* @author CONFRAGE
* @since 2016/04/01
* @param date 年月日(yyyyMMdd型)
* @return 変換結果
* @throws ParseException 例外
*/
public static Date parseStringToDate(String date) throws ParseException {
DateFormat df = new SimpleDateFormat("yyyyMMdd");
df.setLenient(false);
return df.parse(date);
}
/**
* 日数を算出します.<br>
* 引数で渡された文字列型の日付(from)と日付(to)を元に、fromからtoまでの日数を算出します。(fromとtoの日数を含む).<br>
* @author CONFRAGE
* @since 2016/04/01
* @param from 8桁の日付(yyyyMMdd型)
* @param to 8桁の日付(yyyyMMdd型)
* @return 計算された日数
*/
public static int calcDays(String from, String to) {
try {
Date fromDate = parseStringToDate(from);
Date toDate = parseStringToDate(to);
// 日数算出
long day = ((toDate.getTime() - fromDate.getTime()) + (DateUtils.MILLIS_PER_DAY)) / (DateUtils.MILLIS_PER_DAY);
return (int)day;
} catch (Exception e) {
throw new RuntimeException("エラー");
}
}
/**
* 引数で渡された年(yyyy)、月(MM)を元に、その月の1か月間の日数を算出します.<br>
* @author CONFRAGE
* @since 2016/04/01
* @param year 4桁の日付(yyyy型)
* @param month 2桁の日付(MM型)
* @return 1か月の日数
*/
public static int getActualMaximum(String year, String month) {
int intYear = Integer.parseInt(year);
int intMonth = Integer.parseInt(month);
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(intYear, intMonth - 1,1);
return cal.getActualMaximum(Calendar.DATE);
}
/**
* SQLにバインド変数を設定します.<br>
* @author CONFRAGE
* @since 2016/04/01
* @param ps プリペアドステートメント
* @param paramList パラメータリスト
* @throws SQLException SQL例外
*/
public static void setQueryParams (PreparedStatement ps, List<Object> paramList) throws SQLException{
if (ps != null && paramList != null) {
for (int i = 0; i < paramList.size(); i++) {
if (paramList.get(i) == null) {
ps.setNull(i++, Types.NULL);
} else if (paramList.get(i) instanceof String) {
ps.setString(i++, (String)paramList.get(i));
} else if (paramList.get(i) instanceof BigDecimal) {
ps.setBigDecimal(i++, (BigDecimal)paramList.get(i));
} else if (paramList.get(i) instanceof Integer) {
ps.setInt(i++, (int)paramList.get(i));
} else if (paramList.get(i) instanceof Long) {
ps.setLong(i++, (long)paramList.get(i));
} else if (paramList.get(i) instanceof Float) {
ps.setFloat(i++, (float)paramList.get(i));
} else if (paramList.get(i) instanceof Double) {
ps.setDouble(i++, (double)paramList.get(i));
}
}
}
}
/**
* SQL文にパラメータを設定します.<br>
* @author CONFRAGE
* @since 2016/04/01
* @param conn コネクション
* @param sql SQL
* paramerList パラメータリストのリスト
*/
public static void executeBatch(Connection conn, String sql, List<List<Object>> paramLists) {
try (PreparedStatement ps = conn.prepareStatement(sql)) {
int i = 0;
for (List<Object> paramList : paramLists) {
i++;
if((i % 5000) == 0) {
ps.executeBatch();
}
setQueryParams(ps, paramList);
ps.addBatch();
}
ps.executeBatch();
} catch (BatchUpdateException be) {
} catch (SQLException e) {
throw new RuntimeException("");
}
}
/**
* ディレクトリとファイルを再帰的に全削除する
* @param file 削除対象ディレクトリ
*/
public static final void deleteAll(File file) {
if (file == null || !file.exists()) return;
if (file.isFile()) {
// ファイル削除
file.delete();
} else {
// ディレクトリの場合、再帰
File[] obj = file.listFiles();
for (int i = 0; i < obj.length; i++) {
deleteAll(obj[i]);
}
file.delete();
}
}
/**
* BigDecimalの数値を###,###,###区切りにします.<br>
* 1000000を1,000,000にします.<br>
* @author CONFRAGE
* @since 2017/03/24
* @param num 数値
* @return カンマつき数値
*/
public static String addComma(BigDecimal num) {
return NumberFormat.getInstance().format(num);
}
/**
* Apache POIでエクセルのセルを表示する.
* @author CONFRAGE
* @since 2017/05/01
* @param cell Apache POIのセル
* @param dateType セルの日付形式(yyyy/MM/ddなど)
*/
public static Object getCellValue(Cell cell,String dateType) {
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
return cell.getRichStringCellValue().getString();
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
Date dateValue = cell.getDateCellValue();
DateFormat dateFormat = new SimpleDateFormat(dateType);
return dateFormat.format(dateValue);
} else {
return cell.getNumericCellValue();
}
case Cell.CELL_TYPE_BOOLEAN:
return cell.getBooleanCellValue();
case Cell.CELL_TYPE_FORMULA:
return cell.getCellFormula();
default:
return null;
}
}
}

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント