使用DateUtils.formatDate时候要注意了,为什么方法名一样的,获取的时间String却不一样?

原创
09/14 15:01
阅读数 51


org.apache.commons.lang3.time 中format
和 org.apache.http.client.utils DateFormatHolder 中获取format区别是什么

TimeZone 的区别 id  Asia/Shanghai  GMT

Locale 的区别       Locale.US  Locale.SIMPLIFIED_CHINESE  zh_CN
    
    public static String format(Date date, String pattern, TimeZone timeZone, Locale locale) {
        FastDateFormat df = FastDateFormat.getInstance(pattern, timeZone, locale);
        return df.format(date);
    }

    public F getInstance(String pattern, TimeZone timeZone, Locale locale) {
        Validate.notNull(pattern, "pattern must not be null", new Object[0]);
        if (timeZone == null) {
            timeZone = TimeZone.getDefault();
        }

        if (locale == null) {
            locale = Locale.getDefault();
        }

        FormatCache.MultipartKey key = new FormatCache.MultipartKey(new Object[]{pattern, timeZone, locale});
        F format = (Format)this.cInstanceCache.get(key);
        if (format == null) {
            format = this.createInstance(pattern, timeZone, locale);
            F previousValue = (Format)this.cInstanceCache.putIfAbsent(key, format);
            if (previousValue != null) {
                format = previousValue;
            }
        }

        return format;
    }

    static final class DateFormatHolder {
        private static final ThreadLocal<SoftReference<Map<String, SimpleDateFormat>>> THREADLOCAL_FORMATS = new ThreadLocal();

        DateFormatHolder() {
        }

        public static SimpleDateFormat formatFor(String pattern) {
            SoftReference<Map<String, SimpleDateFormat>> ref = (SoftReference)THREADLOCAL_FORMATS.get();
            Map<String, SimpleDateFormat> 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, Locale.US);
                format.setTimeZone(TimeZone.getTimeZone("GMT"));
                ((Map)formats).put(pattern, format);
            }

            return format;
        }

        public static void clearThreadLocal() {
            THREADLOCAL_FORMATS.remove();
        }
    }

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部