首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

一次 SimpleDateFormat 引发的惨案(5)

一次 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 类库

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