基于jdk8的格式化时间方法
来源:互联网 发布:淘宝商城首页女装 编辑:程序博客网 时间:2024/06/10 05:30
背景
jdk8之前,java使用Date表示时间,在做时间的格式化时,通常使用SimpleDateFormat,但是SimpleDateFormat是非线程安全的,在写代码时通常要将之定义为局部变量或者使用ThreadLocal包装;
第三方库joda-time封装了很多对时间的处理方法,可以作为jdk7及其之前的标准时间处理库。jdk8发行后,提供了LocalDateTime,DateTimeFormatter等来处理时间,且都是线程安全的,joda-time也建议使用jdk8的java.time.*的库。
Note that from Java SE 8 onwards, users are asked to migrate to java.time (JSR-310) - a core part of the JDK which replaces this project.
实现
参考joda-time的一些实现,将DateTimeFormatter放在本地缓存中,具体的实现代码如下:
private static final ConcurrentMap<String, DateTimeFormatter> FORMATTER_CACHE = new ConcurrentHashMap<>(); private static final int PATTERN_CACHE_SIZE = 500; /** * Date转换为格式化时间 * @param date date * @param pattern 格式 * @return */ public static String format(Date date, String pattern){ return format(LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()), pattern); } /** * localDateTime转换为格式化时间 * @param localDateTime localDateTime * @param pattern 格式 * @return */ public static String format(LocalDateTime localDateTime, String pattern){ DateTimeFormatter formatter = createCacheFormatter(pattern); return localDateTime.format(formatter); } /** * 格式化字符串转为Date * @param time 格式化时间 * @param pattern 格式 * @return */ public static Date parseDate(String time, String pattern){ return Date.from(parseLocalDateTime(time, pattern).atZone(ZoneId.systemDefault()).toInstant()); } /** * 格式化字符串转为LocalDateTime * @param time 格式化时间 * @param pattern 格式 * @return */ public static LocalDateTime parseLocalDateTime(String time, String pattern){ DateTimeFormatter formatter = createCacheFormatter(pattern); return LocalDateTime.parse(time, formatter); } /** * 在缓存中创建DateTimeFormatter * @param pattern 格式 * @return */ private static DateTimeFormatter createCacheFormatter(String pattern){ if (pattern == null || pattern.length() == 0) { throw new IllegalArgumentException("Invalid pattern specification"); } DateTimeFormatter formatter = FORMATTER_CACHE.get(pattern); if(formatter == null){ if(FORMATTER_CACHE.size() < PATTERN_CACHE_SIZE){ formatter = DateTimeFormatter.ofPattern(pattern); DateTimeFormatter oldFormatter = FORMATTER_CACHE.putIfAbsent(pattern, formatter); if(oldFormatter != null){ formatter = oldFormatter; } } } return formatter; }
有问题请联系wgy@live.cn!
阅读全文
0 0
- 基于jdk8的格式化时间方法
- jdk8的新时间方法time
- 格式化时间的方法
- SQL时间格式化方法的整理
- 格式化时间显示为两位数的方法
- php:自定义的格式化时间方法
- Java时间格式化的各种方法
- JS扩展方法 包括时间的格式化
- java中时间格式化的方法
- java时间格式化的三种方法
- js格式化日期时间的工具方法
- javascript格式化时间的工具方法
- js格式化时间类的方法
- Ubuntu下基于格式化命令 格式化U盘的方法
- Ubuntu下格式化U盘的方法(基于格式化命令)
- 时间格式化方法
- js时间格式化方法
- java进行时间的方法格式化和时间的差值
- mysql优化–explain分析sql语句执行效率
- 加分二叉树
- 微软小冰微博私信接口
- SSH记账管理系统
- linux学习---文件I/O和标准I/O
- 基于jdk8的格式化时间方法
- python学习第一周
- 保险1-概述
- 朴素贝叶斯——完整代码
- Selenium WebDriver 中鼠标事件
- SpringMVC使用@RequestBody注解报400错误
- Volatile总结
- Quartz.Net快速上手
- leetcode 341. Flatten Nested List Iterator