From 24b3e22df86afd2bec6cc7bb42a5434c9e141e02 Mon Sep 17 00:00:00 2001 From: egan Date: Sun, 6 Jan 2019 13:16:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E6=9C=9F=E5=B7=A5=E5=85=B7=E7=B1=BB?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/egzosn/pay/common/util/DateUtils.java | 64 ++++++++++++++----- .../egzosn/pay/fuiou/api/FuiouPayService.java | 2 - .../egzosn/pay/union/api/UnionPayService.java | 7 +- .../com/egzosn/pay/wx/api/WxPayService.java | 6 +- 4 files changed, 54 insertions(+), 25 deletions(-) diff --git a/pay-java-common/src/main/java/com/egzosn/pay/common/util/DateUtils.java b/pay-java-common/src/main/java/com/egzosn/pay/common/util/DateUtils.java index 34ebd7a..df7552d 100644 --- a/pay-java-common/src/main/java/com/egzosn/pay/common/util/DateUtils.java +++ b/pay-java-common/src/main/java/com/egzosn/pay/common/util/DateUtils.java @@ -1,9 +1,10 @@ package com.egzosn.pay.common.util; -import java.text.DateFormat; +import org.apache.http.util.Args; + +import java.lang.ref.SoftReference; import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.TimeZone; +import java.util.*; /** * 日期转换运算工具 @@ -14,27 +15,56 @@ import java.util.TimeZone; * */ public final class DateUtils { - public static final DateFormat YYYY_MM_DD_HH_MM_SS = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - public static final DateFormat YYYY_MM_DD = new SimpleDateFormat("yyyy-MM-dd"); - public static final DateFormat YYYYMMDD = new SimpleDateFormat("yyyyMMdd"); - public static final DateFormat YYYYMMDDHHMMSS = new SimpleDateFormat("yyyyMMddHHmmss"); - public static final DateFormat MMDD = new SimpleDateFormat("MMdd"); - static { - TimeZone timeZone = TimeZone.getTimeZone("GMT+8"); - YYYY_MM_DD_HH_MM_SS.setTimeZone(timeZone); - YYYY_MM_DD.setTimeZone(timeZone); - YYYYMMDD.setTimeZone(timeZone); - YYYYMMDDHHMMSS.setTimeZone(timeZone); - MMDD.setTimeZone(timeZone); + static final class DateFormatHolder { + private static final ThreadLocal>> THREADLOCAL_FORMATS = new ThreadLocal(); + + DateFormatHolder() { + } + + public static SimpleDateFormat formatFor(String pattern) { + SoftReference ref = (SoftReference)THREADLOCAL_FORMATS.get(); + Object formats = ref == null?null:(Map)ref.get(); + if(formats == null) { + formats = new HashMap(); + THREADLOCAL_FORMATS.set(new SoftReference(formats)); + } + + SimpleDateFormat format = (SimpleDateFormat)((Map)formats).get(pattern); + + if(format == null) { + format = new SimpleDateFormat(pattern); + format.setTimeZone(TimeZone.getTimeZone("GMT+8")); + ((Map)formats).put(pattern, format); + } + + return format; + } + + public static void clearThreadLocal() { + THREADLOCAL_FORMATS.remove(); + } } + public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + public static final String YYYY_MM_DD = "yyyy-MM-dd"; + public static final String YYYYMMDD = "yyyyMMdd"; + public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; + public static final String MMDD = "MMdd"; + + + public static String formatDate(Date date, String pattern) { + Args.notNull(date, "Date"); + Args.notNull(pattern, "Pattern"); + SimpleDateFormat formatFor = DateFormatHolder.formatFor(YYYY_MM_DD); + return formatFor.format(System.currentTimeMillis()); + } public static final String format(Date date){ - return YYYY_MM_DD_HH_MM_SS.format(date); + return formatDate(date, YYYY_MM_DD_HH_MM_SS); } public static final String formatDay(Date date){ - return YYYY_MM_DD.format(date); + return formatDate(date, YYYY_MM_DD); } /** diff --git a/pay-java-fuiou/src/main/java/com/egzosn/pay/fuiou/api/FuiouPayService.java b/pay-java-fuiou/src/main/java/com/egzosn/pay/fuiou/api/FuiouPayService.java index eb48071..a04c6cd 100644 --- a/pay-java-fuiou/src/main/java/com/egzosn/pay/fuiou/api/FuiouPayService.java +++ b/pay-java-fuiou/src/main/java/com/egzosn/pay/fuiou/api/FuiouPayService.java @@ -12,8 +12,6 @@ import com.egzosn.pay.common.util.str.StringUtils; import java.awt.image.BufferedImage; import java.io.InputStream; import java.math.BigDecimal; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.*; /** diff --git a/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java b/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java index 6e5b1ad..7f5cc2b 100644 --- a/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java +++ b/pay-java-union/src/main/java/com/egzosn/pay/union/api/UnionPayService.java @@ -23,6 +23,7 @@ import java.io.ByteArrayInputStream; import java.io.InputStream; import java.math.BigDecimal; import java.security.cert.*; +import java.sql.Timestamp; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; @@ -232,9 +233,9 @@ public class UnionPayService extends BasePayService { // 此时间建议取支付时的北京时间加15分钟。 // 超过超时时间调查询接口应答origRespCode不是A6或者00的就可以判断为失败。 if (null != order.getExpirationTime()) { - params.put(SDKConstants.param_payTimeout, DateUtils.YYYYMMDDHHMMSS.format(order.getExpirationTime())); + params.put(SDKConstants.param_payTimeout, DateUtils.formatDate(order.getExpirationTime(), DateUtils.YYYYMMDDHHMMSS)); } else { - params.put(SDKConstants.param_payTimeout, DateUtils.YYYYMMDDHHMMSS.format(System.currentTimeMillis() + 30 * 60 * 1000)); + params.put(SDKConstants.param_payTimeout, DateUtils.formatDate(new Timestamp(System.currentTimeMillis() + 30 * 60 * 1000), DateUtils.YYYYMMDDHHMMSS)); } params.put(SDKConstants.param_frontUrl, payConfigStorage.getReturnUrl()); break; @@ -589,7 +590,7 @@ public class UnionPayService extends BasePayService { Map params = this.getCommonParam(); UnionTransactionType.FILE_TRANSFER.convertMap(params); - params.put(SDKConstants.param_settleDate, DateUtils.MMDD.format(billDate)); + params.put(SDKConstants.param_settleDate, DateUtils.formatDate(billDate, DateUtils.MMDD)); params.put(SDKConstants.param_fileType, billType); params.remove(SDKConstants.param_backUrl); params.remove(SDKConstants.param_currencyCode); diff --git a/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayService.java b/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayService.java index 67ccc37..a571620 100644 --- a/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayService.java +++ b/pay-java-wx/src/main/java/com/egzosn/pay/wx/api/WxPayService.java @@ -203,8 +203,8 @@ public class WxPayService extends BasePayService { parameters.put("notify_url", payConfigStorage.getNotifyUrl()); parameters.put("trade_type", order.getTransactionType().getType()); if (null != order.getExpirationTime()){ - parameters.put("time_start", DateUtils.YYYYMMDDHHMMSS.format(new Date())); - parameters.put("time_expire", DateUtils.YYYYMMDDHHMMSS.format(order.getExpirationTime())); + parameters.put("time_start", DateUtils.formatDate(new Date(), DateUtils.YYYYMMDDHHMMSS)); + parameters.put("time_expire", DateUtils.formatDate(order.getExpirationTime(), DateUtils.YYYYMMDDHHMMSS)); } ((WxTransactionType) order.getTransactionType()).setAttribute(parameters, order); @@ -530,7 +530,7 @@ public class WxPayService extends BasePayService { parameters.put("bill_type", billType); //目前只支持日账单 - parameters.put("bill_date", DateUtils.YYYYMMDD.format(billDate)); + parameters.put("bill_date", DateUtils.formatDate(billDate, DateUtils.YYYYMMDD)); //设置签名 setSign(parameters);