package com.yh.util;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
/**
* Title:
*
* Description:
*
* @author King.Johnson
*
* @version 1.0
*/
public class CommonFunction {
static Logger logger=Logger.getLogger(CommonFunction.class);
private static SimpleDateFormat fullfmt = new SimpleDateFormat("yyyy-MM-dd' 'HH:mm:ss' 'SSS");
private static SimpleDateFormat fullfmt2 = new SimpleDateFormat("yyyyMMddHHmmssSS");
private static SimpleDateFormat datefmt = new SimpleDateFormat("yyyyMMdd");
private static SimpleDateFormat time6fmt = new SimpleDateFormat("HHmmss");
private static SimpleDateFormat time4fmt = new SimpleDateFormat("HHmm");
private static SimpleDateFormat date6fmt = new SimpleDateFormat("yyMMdd");
private static SimpleDateFormat time8fmt = new SimpleDateFormat("HH:mm:ss");
private static SimpleDateFormat time14fmt = new SimpleDateFormat("yyyyMMddHHmmss");
private static SimpleDateFormat time14fmt1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private static SimpleDateFormat datefmtChinese = new SimpleDateFormat("yyyy'年'MM'月'dd'日'");
private static SimpleDateFormat timefmtChinese = new SimpleDateFormat("HH'时'mm'分'ss'秒'");
private static SimpleDateFormat fullfmt4 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
private static SimpleDateFormat time10fmt = new SimpleDateFormat("yyyy-MM-dd");
private static SimpleDateFormat time10fmt2 = new SimpleDateFormat("yyyy/MM/dd");
public static String replaceString(String originalString, String replacedString, String replacementString) {
String stringAfterReplace = Pattern.compile(replacedString, Pattern.LITERAL).matcher(originalString)
.replaceAll(replacementString);
return stringAfterReplace;
}
public static SimpleDateFormat getDatefmt() {
return datefmt;
}
public static SimpleDateFormat datefmtChinese() {
return datefmtChinese;
}
public static SimpleDateFormat timefmtChinese() {
return timefmtChinese;
}
public static SimpleDateFormat getTime6fmt() {
return time6fmt;
}
public static SimpleDateFormat getTime8fmt() {
return time8fmt;
}
public static String converPath(String type) {
String path = type.replaceAll("\\.", "/");
return path;
}
public static String getLocalFullTime() {
return fullfmt.format(new Date());
}
public static String getLocalFullTime2() {
return fullfmt2.format(new Date());
}
/**
*
* @return yyyyMMdd
*/
public static String getLocalDate() {
return datefmt.format(new Date());
}
/**
*
* @return yyMMdd
*/
public static String getLocal6Date() {
return date6fmt.format(new Date());
}
public static String getLocalTime() {
return time8fmt.format(new Date());
}
public static String getLocalTime6() {
return time6fmt.format(new Date());
}
public static String getLocalTime4() {
return time4fmt.format(new Date());
}
public static String getLocalTime8() {
return time8fmt.format(new Date());
}
public static String getLocalTime14() {
return time14fmt.format(new Date());
}
public static Date getDate() {
return new Date();
}
public static String TimeTransfer6to8(String tm6) {
return tm6.substring(0, 2) + ":" + tm6.substring(2, 4) + ":" + tm6.substring(4, 6);
}
/**
* 获取一个月的最后一天
*/
public static String getLateDayInMonth(String currDate) {
String currYear = currDate.substring(0, 4);
String currMonth = currDate.substring(4, 6);
String currDay = currDate.substring(6, 8);
GregorianCalendar currGCal = new GregorianCalendar(Integer.parseInt(currYear), Integer.parseInt(currMonth) - 1,
Integer.parseInt(currDay));
currGCal.add(GregorianCalendar.MONTH, 1);
currGCal.set(GregorianCalendar.DATE, 1);
currGCal.add(GregorianCalendar.DATE, -1);
return datefmt.format(currGCal.getTime());
}
public static String getNextDate(String currDate) {
String currYear = currDate.substring(0, 4);
String currMonth = currDate.substring(4, 6);
String currDay = currDate.substring(6, 8);
GregorianCalendar currGCal = new GregorianCalendar(Integer.parseInt(currYear), Integer.parseInt(currMonth) - 1,
Integer.parseInt(currDay));
currGCal.add(GregorianCalendar.DAY_OF_MONTH, 1);
return datefmt.format(currGCal.getTime());
}
/**
*
* @param d
* @param iLen
* @param dLen
* @return
*/
public static String DecToString(BigDecimal d, int iLen, int dLen) {
String s = d.toString();
int iDot = s.indexOf('.');
if (iDot < 0) {
String sReturn = fillString(d.toString(), '0', iLen + dLen, false);
return sReturn;
}
if (iLen < iDot) {
String sReturn = fillString(d.toString(), '0', iLen + dLen, false);
return sReturn;
}
String sInt = s.substring(0, iDot); //
String sDec = s.substring(iDot + 1); //
String sRtnInt = fillString(sInt, '0', iLen, false); //
String sRtnDec = fillString(sDec, '0', dLen, true); //
StringBuffer sReturn = new StringBuffer(sRtnInt).append(sRtnDec);
return sReturn.toString();
}
/**
*
* @param string
* @param filler
* @param totalLength
* @param atEnd
* @return
*/
public static String fillString(String string, char filler, int totalLength, boolean atEnd) {
byte[] tempbyte = string.getBytes();
int currentLength = tempbyte.length;
int delta = totalLength - currentLength;
for (int i = 0; i < delta; i++) {
if (atEnd) {
string += filler;
} else {
string = filler + string;
}
}
return string;
}
/**
* 显示金额 从分到元
*
* @param money
* @return
*/
public static String showMoney(String money) {
String tmp = null;
//
if (money == null || money.trim().equals("") || money.trim().equals("-")) {
return "-";
}
try {
money = new java.math.BigInteger(money.trim()).toString();
} catch (Exception e) {
return money.trim();
}
//
int iLen = money.trim().length();
if (iLen < 3) {
money = fillString(money.trim(), '0', 3, false);
}
int iLenFill = money.trim().length();
//
StringBuffer rtnMoney = new StringBuffer(money.trim());
rtnMoney.insert(iLenFill - 2, '.');
tmp = rtnMoney.toString().trim();
iLen = 0;
iLenFill = 0;
rtnMoney = null;
return tmp;
}
/**
*
* @param time6
* @return
*/
public static String ConverTime6TO8(String time6) {
if (time6.length() != 6) {
return time6;
}
String sHour = time6.substring(0, 2);
String sMin = time6.substring(2, 4);
String sSec = time6.substring(4, 6);
StringBuffer tmp8 = new StringBuffer(sHour).append(":").append(sMin).append(":").append(sSec);
return tmp8.toString().trim();
}
/**
*
* @param currDate
* @param offset
* @param orgDate
* @return
*/
public static boolean checkDate(String currDate, int offset, String orgDate) {
boolean flag = true;
String sYear = currDate.substring(0, 4);
String sMonth = currDate.substring(4, 6);
String sDay = currDate.substring(6, 8);
int iYear = Integer.valueOf(sYear).intValue();
int iMonth = Integer.valueOf(sMonth).intValue() - 1;
int iDay = Integer.valueOf(sDay).intValue();
GregorianCalendar tmpcal = new GregorianCalendar(iYear, iMonth, iDay);
GregorianCalendar cal = new GregorianCalendar(iYear, iMonth, iDay);
tmpcal.add(Calendar.DAY_OF_MONTH, -offset);
Date d1 = cal.getTime(); //
Date tmpd1 = tmpcal.getTime(); //
String s_org_year = orgDate.substring(0, 4);
String s_org_month = orgDate.substring(4, 6);
String s_org_day = orgDate.substring(6, 8);
int oYear = Integer.valueOf(s_org_year).intValue();
int oMonth = Integer.valueOf(s_org_month).intValue() - 1;
int oDay = Integer.valueOf(s_org_day).intValue();
GregorianCalendar org_cal = new GregorianCalendar(oYear, oMonth, oDay);
Date d2 = org_cal.getTime(); // 原
if (d1.compareTo(d2) < 0) {
return false;
}
if (tmpd1.compareTo(d2) <= 0) {
flag = true;
} else {
flag = false;
}
return flag;
}
/**
*
*
* @param in
* @return
*/
public static Map<String, String> ParamStringToMap(String in) {
HashMap<String, String> map = new HashMap<String, String>();
String[] ins = in.split(";");
for (int i = 0; i < ins.length; i++) {
String tmp = ins[i];
String id = tmp.substring(0, tmp.indexOf("="));
String value = tmp.substring(tmp.indexOf("=") + 1);
map.put(id, value);
}
return map;
}
/**
* format double 两位小数
*
* @param n
* @return
*/
public static double getValue(double n) {
return Double.valueOf(new java.text.DecimalFormat(".##").format(n)).doubleValue();
}
/**
* yyyymmdd->yyyy-mm-dd
*
* @param date
* @return
*/
public static String formatDate8(String date) {
if (date == null || date.length() != 8) {
return date;
}
String year = date.substring(0, 4);
String month = date.substring(4, 6);
String day = date.substring(6);
StringBuffer rtnDate = new StringBuffer(year).append("-").append(month).append("-").append(day);
return rtnDate.toString().trim();
}
public static String genSettleDate(String settleDate, String intTxnDt) {
String currYear = intTxnDt.substring(0, 4);
int iCurrYear = Integer.valueOf(currYear).intValue();
String currDate = intTxnDt.substring(4, 8);
if (settleDate.equals("1231")) {
if (currDate.startsWith("01")) { // 1231 vs 01*
return String.valueOf((iCurrYear - 1)).toString().trim() + settleDate;
}
}
if (settleDate.equals("0101")) {
if (currDate.startsWith("12")) { // 0101 vs 12*
return String.valueOf((iCurrYear + 1)).toString().trim() + settleDate;
}
}
return currYear + settleDate;
}
public static boolean checkDt(String format, String date) {
try {
SimpleDateFormat dFormat = new SimpleDateFormat(format);
dFormat.setLenient(false);
dFormat.parse(date);
return true;
} catch (Exception ex) {
}
return false;
}
public static String transDate17to14(String date17) {
if (date17.length() != 17) {
return date17;
}
String year = date17.substring(0, 8);
String time = date17.substring(9, 17);
StringBuffer date14 = new StringBuffer(year);
return date14.append(time.substring(0, 2)).append(time.substring(3, 5)).append(time.substring(6, 8)).toString()
.trim();
}
public static SimpleDateFormat getTimeFormat14() {
return time14fmt;
}
public static SimpleDateFormat getTime14fmt1() {
return time14fmt1;
}
public static void setTime14fmt1(SimpleDateFormat time14fmt1) {
CommonFunction.time14fmt1 = time14fmt1;
}
/**
* 检查是否是数字
*
* @param Value
* @return
*/
public static boolean isNumeric(String Value) {
String tmpValue = Value.trim();
int i = 0, PointCount = 0;
char OneByte = tmpValue.charAt(0);
if (OneByte == '-') {
i = 1;
}
for (; i < tmpValue.length(); i++) {
if (OneByte == '.') {
PointCount = PointCount + 1;
if (PointCount > 1) {
return false;
}
}
else if ((OneByte > '9' || OneByte < '0')) {
return false;
}
}
return true;
}
/**
* 格式化时间: YYYYMMDDHHMMSS -> YYYY-MM-DD HH:MM:SS
*
* @param s
* @return
*/
public static String formatTime14(String s) {
if(StringUtils.isBlank(s) || s.length() < 14)
return s;
StringBuffer sr = new StringBuffer("");
String year = s.substring(0, 4);
String month = s.substring(4, 6);
String day = s.substring(6, 8);
String time = s.substring(8);
sr.append(year).append("-").append(month).append("-").append(day).append(" ").append(time.substring(0, 2))
.append(":").append(time.substring(2, 4)).append(":").append(time.substring(4));
return sr.toString().trim();
}
public static String unformatTime(String s) {
if (StringUtils.isBlank(s) ) {
return null;
}
String regex = "-|:|\\s|年|月|日|时|分|秒";
return s.replaceAll(regex, "");
}
/**
* 格式化时间: YYYYMMDD -> YYYY年MM月DD日
*
* @param s
* @return
*/
public static String formatTime8Chinese(String s) {
if (s == null || s.length() != 8) {
return s;
}
StringBuffer sr = new StringBuffer("");
String year = s.substring(0, 4);
String month = s.substring(4, 6);
String day = s.substring(6, 8);
sr.append(year).append("年").append(month).append("月").append(day).append("日 ");
return sr.toString().trim();
}
/**
* 格式化时间: YYYY-M-DD 或YYYY-M-D-> YYYYMMDD
*
* @param s
* @return
*/
public static String formatTime8(String s) {
if(StringUtils.isBlank(s))
return s;
StringBuffer sr = new StringBuffer("");
String array[]=s.split("-");
String year = array[0];
String month = array[1];
String day = array[2];
if(month.length()<2){
month = "0"+month;
}
if(day.length()<2){
day = "0"+day;
}
sr.append(year).append(month).append(day);
return sr.toString().trim();
}
/**
* 格式化时间: YYYYMMDDHHMMSS -> YYYY年MM月DD日 HH时MM分SS秒
*
* @param s
* @return
*/
public static String formatTime14Chinese(String s) {
if(StringUtils.isBlank(s) || s.length() < 14)
return s;
StringBuffer sr = new StringBuffer("");
String year = s.substring(0, 4);
String month = s.substring(4, 6);
String day = s.substring(6, 8);
String time = s.substring(8);
sr.append(year).append("年").append(month).append("月").append(day).append("日 ").append(time.substring(0, 2))
.append("时").append(time.substring(2, 4)).append("分").append(time.substring(4)).append("秒");
return sr.toString().trim();
}
/**
* 将元转换成分
*
* @param disAmt
* @return
*/
public static String fmtDisAmtToDBAmt(String disAmt) {
if (disAmt == null || disAmt.trim().equals("")) {
return "-";
}
BigDecimal disAmtStr = new BigDecimal(disAmt);
disAmtStr = disAmtStr.movePointRight(2);
return disAmtStr.toString();
}
/**
* 将分转换成元
*
* @param dbAmt
* @return
*/
public static String fmtDBAmtToDisAmt(String dbAmt) {
if (dbAmt == null || dbAmt.trim().equals("")) {
return "-";
}
BigDecimal DdbAmtStr = new BigDecimal(dbAmt);
DdbAmtStr = DdbAmtStr.movePointLeft(2);
return DdbAmtStr.toString();
}
/**
* 将日期转化为年月日格式,并且月日小于10时前面不带0
*
* @param date
* @return String:date
*/
public static String fmtDateType(String date) {
String yy = null;
String mm = null;
String dd = null;
if (date != null && !date.equals("") && date.length() == 8) {
yy = date.substring(0, 4);
mm = date.substring(4, 6);
dd = date.substring(6, 8);
if (Integer.parseInt(mm) < 10) {
mm = String.valueOf(Integer.parseInt(mm));
}
if (Integer.parseInt(dd) < 10) {
dd = String.valueOf(Integer.parseInt(dd));
}
date = yy + "年" + mm + "月" + dd + "日";
} else {
date = "-";
}
return date;
}
/**
* 将形如 000000000020 的字符串转换成 20
*
* @param fixZeroStr
* @return
*/
public static String converFixZeroStr2NoZero(String fixZeroStr) {
BigDecimal num = new BigDecimal(fixZeroStr);
return num.toString().trim();
}
/*** 获得当前日期与本周一相差的天数**/
private static int getMondayPlus() {
Calendar today = Calendar.getInstance();
// 获得今天是一周的第几天,星期日是第一天,星期二是第二天......
int dayOfWeek = today.get(Calendar.DAY_OF_WEEK);
if (dayOfWeek == 1) {
return -6;
} else {
return 2 - dayOfWeek;
}
}
/*** 获得当前周- 周一的日期*/
public static String getCurrentMonday() {
int mondayPlus = getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
/*** 获得当前周- 周日 的日期*/
public static String getPreviousSunday() {
int mondayPlus = getMondayPlus();
GregorianCalendar currentDate = new GregorianCalendar();
currentDate.add(GregorianCalendar.DATE, mondayPlus +6);
Date monday = currentDate.getTime();
DateFormat df = DateFormat.getDateInstance();
String preMonday = df.format(monday);
return preMonday;
}
private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
/*** 获得当前日期的月开始日期*/
public static String getMinMonthDate(String date) {
Calendar calendar = Calendar.getInstance();
try {
calendar.setTime(dateFormat.parse(date));
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
return dateFormat.format(calendar.getTime());
} catch (java.text.ParseException e) {
e.printStackTrace();
}
return null;
}
/*** 获得当前日期的月结束日期*/
public static String getMaxMonthDate(String date){
Calendar calendar = Calendar.getInstance();
try {
calendar.setTime(dateFormat.parse(date));
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return dateFormat.format(calendar.getTime());
} catch (java.text.ParseException e) {
e.printStackTrace();
}
return null;
}/**
* 格式化时间: YYYYMMDD -> YYYY-MM-DD
*
* @param s
* @return
*/
public static String formatTime10(String s) {
if (s == null || s.equals("") || s.length() < 8)
return "";
StringBuffer sr = new StringBuffer("");
String year = s.substring(0, 4);
String month = s.substring(4, 6);
String day = s.substring(6, 8);
sr.append(year).append("-").append(month).append("-").append(day);
return sr.toString().trim();
}
/**
* 将 yyyy-mm-dd或 yyyy/mm/dd 的日期格式化为 yyyymmddHHMISS
* @return 20170523000000
*/
public static String formatStartDatetime(String datetime){
if(StringUtils.isNotBlank(datetime)){
datetime = datetime.replace("-", "").replace("/", "");
if(datetime.length()==8){
datetime = datetime+"000000";
}
if(datetime.equals("undefined")){
datetime = "";
}
}
return datetime;
}
/**
* 将 yyyy-mm-dd或 yyyy/mm/dd 的日期格式化为 yyyymmddHHMISS
* @return 20170523235959
*/
public static String formatEndDatetime(String datetime){
if(StringUtils.isNotBlank(datetime)){
datetime = datetime.replace("-", "").replace("/", "");
if(datetime.length()==8){
datetime = datetime+"235959";
}
if(datetime.equals("undefined")){
datetime = "";
}
}
return datetime;
}
/**
* String 转 List<String>
* @param paramlist
* @return
*/
public static List<String> stringToList(String paramlist, String split) {
List<String> retList = new ArrayList<String>();
if(StringUtils.isNotBlank(paramlist)){
String[] arr = paramlist.split("\\|");
for(String str : arr){
if(StringUtils.isNotBlank(str))
retList.add(str);
}
}
return retList;
}
public static String listToString(List<String> list, String split) {
String retStr = "";
if(list != null){
for(String str : list){
if(StringUtils.isNotBlank(str))
retStr += str + "|";
}
}
if(retStr.length() > 1)
retStr = retStr.substring(0, retStr.length() - 1);
return retStr;
}
public static void main(String[] args) {
String fday = getCurrentMonday();
String sunday = getPreviousSunday();
System.out.println(""+formatTime8("2018-10-9")+"--周末"+sunday);
String s = formatTime8("2014-8-6");
System.out.println(s);
}
/**
* 生成指定日期日期的下一天
*
* @param currDay
* @return
*/
public static String getAfterDay(String currDay, int dayNm) {
String nextDay = null;
try {
SimpleDateFormat tstDate = new SimpleDateFormat("yyyyMMdd");
Date tstdate1 = tstDate.parse(currDay);
Calendar rightNow = Calendar.getInstance();
rightNow.setTime(tstdate1);
rightNow.add(Calendar.DAY_OF_MONTH, dayNm);
nextDay = tstDate.format(rightNow.getTime());
}
catch (Exception ex) {
logger.debug("异常信息", ex);
}
return nextDay;
}
public static String getLocalTime14fmt1() {
return time14fmt1.format(new Date());
}
public static String getLocalFullTime4() {
return fullfmt4.format(new Date());
}
/**
* 处理String,去两边空格;如果是null,返回空字符串
*
* @param primary
* @return
*/
public static String pretreatString(String primary) {
String tmp = primary;
tmp = tmp == null ? "" : tmp.trim();
return tmp;
}
/**
* 处理Object,如果是空,返回空字符串;如果有内容,则转化为String,并去除空格
*
* @param o
* @return
*/
public static String pretreatString(Object o) {
if (o == null) {
return "";
} else {
return pretreatString(String.valueOf(o));
}
}
/**
* 转换数据库14位日期时间格式为标准页面展现格式,如20070326142635-->2007-03-26 14:26:35
*
* @param date
* @return 标准格式的数据库日期
*/
public static String getStdFormatDateTimeByDB(String date) {
if (date == null)
return "";
date = date.trim();
if (date.length() == 14)
return date.substring(0, 4) + "-" + date.substring(4, 6) + "-"
+ date.substring(6, 8) + " " + date.substring(8, 10) + ":"
+ date.substring(10, 12) + ":" + date.substring(12);
return date;
}
/**
*
* 描述:获取n个月后的第一天.
*
* @return
*/
public static String getAfterNFirstDayOfMonth(int n) {
SimpleDateFormat dft = new SimpleDateFormat("yyyy'年'MM'月'dd'日'");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, n);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
return dft.format(calendar.getTime());
}
/**
* 获取n个月后的第一天.
* @param n 第n月
* @param day 第day天
* @return
*/
public static String getAfterNFirstDayOfMonth(int n,int day) {
SimpleDateFormat dft = new SimpleDateFormat("yyyy'年'MM'月'dd'日'");
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, n);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
calendar.add(Calendar.DAY_OF_MONTH, day);
return dft.format(calendar.getTime());
}
/**
* 格式化时间: YYYY年MM月DD日--> YYYYMMDD
*
* @param s
* @return
*/
public static String formatTime9Chinese(String s) {
StringBuffer sr = new StringBuffer("");
String aa[] = s.split("年");
String year=aa[0];
String bb[]=aa[1].split("月");
String month=bb[0];
String day = bb[1].split("日")[0];
sr.append(year).append(month).append(day);
return sr.toString().trim();
}
public static String addDate(String day, int x) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//24小时制
Date date = null;
try {
date = format.parse(day);
} catch (Exception ex) {
ex.printStackTrace();
}
if (date == null) {
return "";
}
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.HOUR_OF_DAY, x);//24小时制
date = cal.getTime();
System.out.println("front:" + date);
cal = null;
return format.format(date);
}
}