博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
日期格式化工具方法
阅读量:6223 次
发布时间:2019-06-21

本文共 3189 字,大约阅读时间需要 10 分钟。

1. 日期格式化工具方法

1.1. 代码

public class DateUtil {    public enum DateType{        /**         * 年月日时分秒         */        YMDHMS("yyyy-MM-dd HH:mm:ss"),        /**         * 年月日时分         */        YMDHM("yyyy-MM-dd HH:mm"),        /**         * 年月日         */        YMD("yyyy-MM-dd"),        /**         * 年月日中文         */        YMD_CN("yyyy年MM月dd日"),        /**         * 年月日时分秒中文         */        YMDHMS_CN("yyyy年MM月dd日 HH时mm分ss秒");        private String format;        DateType(String format) {            this.format = format;        }        public String getFormat() {            return format;        }    }    public DateUtil() {    }    private static Map
> threadLocalMap = new HashMap<>(); static { DateType[] values = DateType.values(); for (DateType value : values) { String format = value.getFormat(); threadLocalMap.put(format, ThreadLocal.withInitial(() -> new SimpleDateFormat(format))); } } /** * 添加自定义日期格式,最好在系统初始化的时候加进去 * 已存在日期格式,查看{@link DateType} * @param format 日期格式,例如yyyy-MM-dd */ public static void putThreadLocalMap(String format) { if (threadLocalMap.get(format) == null) { threadLocalMap.put(format, ThreadLocal.withInitial(() -> new SimpleDateFormat(format))); } } public static void main(String[] args) { String format = "yyyy/MM/dd"; putThreadLocalMap(format); System.out.println(DateUtil.format(new Date(), DateType.YMDHMS)); System.out.println(DateUtil.format(new Date(), DateType.YMD)); System.out.println(DateUtil.format(new Date(), DateType.YMD_CN)); System.out.println(DateUtil.format(new Date(), format)); } //日期转字符串 public static String format(Date date,DateType dateType) { String format = dateType.getFormat(); return format(date, format); } public static String format(Date date,String format) { ThreadLocal
threadLocal = threadLocalMap.get(format); if (threadLocal == null) { return null; } return threadLocal.get().format(date); } //字符串转日期 public static Date parse(String str,DateType dateType) throws ParseException { ThreadLocal
threadLocal = threadLocalMap.get(dateType.getFormat()); if (threadLocal == null) { return null; } return threadLocal.get().parse(str); }}

1.2. 说明

  以上是基于jdk8语法实现,但格式化工具还是用的SimpleDateFormat,该类通过查看它的注解,可以知道它并不是线程安全的,但是每次单独实例化它也是比较耗费资源的。因此网上较流行的方式就是用ThreadLocal包裹,用空间换时间的方式,上述工具类为我自己的封装,如果有人看不下去的,有更好的替代方案或设计模式可以提出来哦

* 

* Date formats are not synchronized. * It is recommended to create separate format instances for each thread. * If multiple threads access a format concurrently, it must be synchronized * externally. * 日期格式没有同步。建议为每个线程创建单独的格式实例。如果多个线程同时访问一种格式,则必须在 * 外部同步该格式。 * * @see Java Tutorial * @see java.util.Calendar * @see java.util.TimeZone * @see DateFormat * @see DateFormatSymbols * @author Mark Davis, Chen-Lieh Huang, Alan Liu */public class SimpleDateFormat extends DateFormat {

转载于:https://www.cnblogs.com/sky-chen/p/10399791.html

你可能感兴趣的文章
组策略模板DIY
查看>>
基础编码管理组件 Example 程序
查看>>
安装边缘服务器-part01
查看>>
第十四章:监测和维护活动目录(一)(译自WindowsServer2008ActiveDirectoryResourceKit)
查看>>
Jackson序列化实例
查看>>
Flex入门
查看>>
docker常用的命令(持续更新)
查看>>
LoRa联盟主席:聚焦标准规范+产业生态,全球物联网事实标准初显
查看>>
继承性
查看>>
【ItemizedOverlay的ArrayIndexOutOfBoundsException/NullPointerException异常解决办法】
查看>>
ubuntu无法激活输入法,Zendstudio无法激活中文输入法问题
查看>>
linux下删除文件恢复方法
查看>>
Linux下如何识别IDER的软驱和光驱
查看>>
TreeView控件应用(包含递归调用)
查看>>
Android中文API(95)——SimpleExpandableListAdapter
查看>>
国内的机器视觉技术行业发展趋势分析
查看>>
Oracle中的nvl函数
查看>>
云场景实践研究第86期:美甲帮
查看>>
使用Windows远程桌面(mstsc)通过RDP协议访问Ubuntu/Debian服务器
查看>>
LeetCode - 4. Median of Two Sorted Arrays
查看>>