java线程安全类时间处理

SimpleDateFormat是线程不安全,
关于时间处理推荐进行如下,如果是jdk低于1.7用:
public final static String DATE_PATTERN = "yyyy-MM-dd";
private static ThreadLocal<DateFormat> threadLocal = new ThreadLocal<DateFormat>() {
    @Override
    protected DateFormat initialValue() {
        return new SimpleDateFormat(DATE_TIME_PATTERN);
    }
};

/**
 * 线程安全的转换
 *
 * @param dateStr
 * @return
 * @throws ParseException
 */
public static Date parseSync(String dateStr) throws ParseException {
    return threadLocal.get().parse(dateStr);
}


/**
 * 线程安全的时间工具类
 *
 * @param date
 * @return
 */
public static String formatSync(Date date) {
    return threadLocal.get().format(date);
}


jdk1.8提供新的时间处理,是线程安全的:
public static Date parseSync8(String dateStr, String pattern) {
    if (StringUtils.isEmpty(pattern)) {

        pattern = DATE_PATTERN;
    }
    java.time.format.DateTimeFormatter formatter = java.time.format.DateTimeFormatter.ofPattern(pattern);

    java.time.LocalDate date = java.time.LocalDate.parse(dateStr, formatter);

    ZoneId zoneId = ZoneId.systemDefault();
    ZonedDateTime zdt = date.atStartOfDay(zoneId);

    return Date.from(zdt.toInstant());
}

public static String formatSync8(Date date, String pattern) {
    if (StringUtils.isEmpty(pattern)) {

        pattern = DATE_PATTERN;
    }

    java.time.format.DateTimeFormatter formatter = java.time.format.DateTimeFormatter.ofPattern(pattern);
    ZoneId zoneId = ZoneId.systemDefault();
    LocalDateTime now = date.toInstant().atZone(zoneId).toLocalDateTime();

    return now.format(formatter);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值