Board logo

标题: 一次 SimpleDateFormat 引发的惨案(5) [打印本页]

作者: look_w    时间: 2019-4-12 15:43     标题: 一次 SimpleDateFormat 引发的惨案(5)

方法三:

    public class DateUtil {
        private static Logger logger = Logger.getLogger(DataTool.class);
        private static ThreadLocal<DateFormat> threadLocal = new ThreadLocal<DateFormat>() {
            @Override
            protected DateFormat initialValue() {
                return new SimpleDateFormat("yyyy-MM-dd");
            }
        };
     
        private static ThreadLocal<DateFormat> threadLocal2 = new ThreadLocal<DateFormat>() {
            @Override
            protected DateFormat initialValue() {
                return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
            }
        };
     
        public static String CCTToUTC(String timeString) {
            try {
                Date date = parse(timeString);
                Calendar calendar = Calendar.getInstance();
                Date tgtDate = new Date(date.getTime() - calendar.getTimeZone().getRawOffset());
                return formatDate(tgtDate);
            } catch (Exception e) {
                logger.warn(timeString + " parse err", e);
                return formatDate(new Date());
            }
        }
     
        private static Date parse(String dateStr) throws ParseException {
            return threadLocal.get().parse(dateStr);
        }
     
        private static String formatDate(Date date) throws ParseException {
            return threadLocal2.get().format(date);
        }
    }
    复制代码

方法四:抛弃JDK,使用其他类库中的时间格式化类:

    使用 Apache commons 里的 FastDateFormat,“官宣”是既快又线程安全的 SimpleDateFormat, 可惜它只能对日期进行format(), 不能对日期串进行parse()
    使用 Joda-Time 类库

其中,方法一和二,简单好用,推荐;方法三性能更优。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0