博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDK8日期时间库 例子
阅读量:5037 次
发布时间:2019-06-12

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

1. 基本使用例子

package com.example.java8demo;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import java.time.*;import java.time.format.DateTimeFormatter;import java.time.temporal.TemporalAdjusters;import java.util.Set;/** * java 8 对于日期和时间的使用 * API文档:https://blog.fondme.cn/apidoc/jdk-1.8-google/下的java.time包下 */@RunWith(SpringRunner.class)@SpringBootTest // 指定启动类public class LocalDateTimeTest {            /**     * localDate The operation of time     */    @Test    public void  test1(){                LocalDateTime localDateTime = LocalDateTime.now();        System.out.println("++++【localDateTime】++++"+localDateTime);        // -------iso 标准时间体系-------        LocalDateTime localDateTime1 = LocalDateTime.of(2018, 9, 25, 16, 46);        System.out.println("++++++【localDateTime1】+++++"+localDateTime1);        LocalDateTime localDateTime2 = localDateTime1.minusDays(20);        System.out.println("+++++++【localDateTime2】+++++++"+localDateTime2);        System.out.println("+++++++【localDateTime2.plusMonths(2)】+++++++++"+localDateTime2.plusMonths(2));        System.out.println("localDateTime2.getYear()"+localDateTime2.getYear());        System.out.println("localDateTime2.getMonthValue()"+localDateTime2.getMonthValue());        System.out.println("localDateTime2.getMonth()"+localDateTime2.getMonth());        System.out.println("localDateTime2.getDayOfWeek()"+localDateTime2.getDayOfWeek());        System.out.println("localDateTime2.getDayOfMonth()"+localDateTime2.getDayOfMonth());        System.out.println("localDateTime2.getHour()"+localDateTime2.getHour());        System.out.println("localDateTime2.getMinute()"+localDateTime2.getMinute());        System.out.println("localDateTime2.getSecond()"+localDateTime2.getSecond());    }    /**     * 2. Instant : 时间戳。 (使用 Unix 元年  1970年1月1日 00:00:00 所经历的毫秒值)     */    @Test    public void test2(){        //默认使用 UTC 时区        Instant ins = Instant.now();        System.out.println(ins);        //偏移时区调整,时间偏移量8个小时        OffsetDateTime odt = ins.atOffset(ZoneOffset.ofHours(8));        System.out.println(odt);        System.out.println("++++ins.getNano()++++"+ins.getNano());         Instant ins2 = Instant.ofEpochSecond(5);         System.out.println("++++ins2++++"+ins2);    }        /**     * 计算时间间隔  Duration Period     * @throws InterruptedException      *  toMillis()     *      */    @Test    public void test3() throws InterruptedException{                Instant instantBegin = Instant.now();        Thread.sleep(2000);        Instant instantEnd = Instant.now();        System.out.println("输出当前时间间隔差"+ Duration.between(instantBegin, instantEnd).toMillis());        // -----------------------------------------------------------------------        LocalDate local1 = LocalDate.now();        LocalDate local2 = LocalDate.of(2016, 7, 23);        Period period = Period.between(local1, local2);        System.out.println("++++year++++"+period.getYears());        //月份单位不会按年份单位自动标准化。 这意味着“15个月”与“1年3个月”不同。查看api文档        System.out.println("++++month++++"+period.getMonths());        System.out.println("++++days++++"+period.getDays());    }        /**     * 时间校正器     * TemporalAdjuster     */    @Test    public void test4(){                LocalDateTime ldt = LocalDateTime.now();        System.out.println("-----ldt-----"+ldt);        //表示为本月中的第几天        LocalDateTime ldt2 = ldt.withDayOfMonth(30);        System.out.println("----ldt2----"+ldt2);                //计算下周一的时间        LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.MONDAY));        System.out.println("------ldt3-----"+ldt3);                //自定义:下一个工作日        LocalDateTime ldt4 = ldt.with((local) ->{                        LocalDateTime ldt5 = (LocalDateTime) local;            DayOfWeek dow = ldt5.getDayOfWeek();                        if(dow.equals(DayOfWeek.FRIDAY)){                return ldt5.plusDays(3);            }else if(dow.equals(DayOfWeek.SATURDAY)){                return ldt5.plusDays(2);            }else{                return ldt5.plusDays(1);            }        });        System.out.println("-------ldt4-----"+ldt4);            }            /**     * 5. DateTimeFormatter : 解析和格式化日期或时间     */    @Test    public void test5(){                DateTimeFormatter dateTimeFormater = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");        LocalDateTime localDateTime = LocalDateTime.now();        System.out.println("【----未格式化之前----】" + localDateTime);        System.out.println("【----格式化之后----】"+dateTimeFormater.format(localDateTime));    }        @Test    public void test6(){        // 获取可用时区        Set
set = ZoneId.getAvailableZoneIds(); set.forEach(System.out::println); } /** * 7.ZonedDate、ZonedTime、ZonedDateTime : 带时区的时间或日期 */ @Test public void test7(){ LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai")); System.out.println("----【ldt】----"+ldt); ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("America/New_York")); System.out.println("----【zdt】----"+zdt); } /** *
备注: * * zone 英[zəʊn]美[zoʊn]n.地带; 区域,范围; 地区,时区; [物] 晶带;vt. 划分成带; 用带子围绕;vi. 分成区,分成地带; * * available 英[əˈveɪləbl]美[əˈveləbəl]adj. 可获得的; 有空的; 可购得的; 能找到的; * * offset 美[ˈɔ:fset]vt. 抵消; 补偿; (为了比较的目的而)把…并列(或并置) ; * 为(管道等)装支管;vi. 形成分支,长出分枝; 装支管;n. 开端; 出发; 平版印刷; 抵消,补偿; * * duration 美[duˈreɪʃn] n. 持续,持续的时间,期间; (时间的) 持续,持久,连续; [语音学] 音长,音延; * * instant 英[ˈɪnstənt] 美[ˈɪnstənt] n. 瞬间,顷刻; 此刻; 当月; 速食食品,即溶饮料; adj. 立即的; 迫切的; 正在考虑的,目前的; 即食的; * * temporal 英[ˈtempərəl] 美[ˈtɛmpərəl,ˈtɛmprəl] adj.时间的; 世俗的; 暂存的;
<语>
表示时间的; n.暂存的事物,世间的事物; 世俗的权力; 一时的事物,俗事; * * adjuster 英[ə'dʒʌstə] 美[ə'dʒʌstə] n.调停者,调节器; * */}

  2. 封装工具类

package com.example.java8demo;import java.time.LocalDateTime;import java.time.ZoneId;import java.time.format.DateTimeFormatter;import java.util.Date;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ConcurrentMap;/** * @Title   日期时间工具类 * @Author  lijingrun * @Version 1.0.0 * @Date 2018/9/25 17:27 * @Description 使用JDK8新特性封装的日期时间工具类 */public class DateTimeUtils {    private static final ConcurrentMap
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); //putIfAbsent,如果指定的键尚未与值相关联,请将其与给定值相关联。 DateTimeFormatter oldFormatter = FORMATTER_CACHE.putIfAbsent(pattern, formatter); if(oldFormatter != null){ formatter = oldFormatter; } } } return formatter; }}

  3. 参看文档

https://blog.fondme.cn/apidoc/jdk-1.8-google/下的java.time包下相关

https://wizardforcel.gitbooks.io/java8-tutorials/content/Java%208%20%E6%96%B0%E7%89%B9%E6%80%A7%E7%BB%88%E6%9E%81%E6%8C%87%E5%8D%97.html#datetimeAPI

[Java 8新的时间日期库的20个使用示例](https://wizardforcel.gitbooks.io/java8-tutorials/content/Java%208%20%E6%96%B0%E7%9A%84%E6%97%B6%E9%97%B4%E6%97%A5%E6%9C%9F%E5%BA%93%E7%9A%8420%E4%B8%AA%E4%BD%BF%E7%94%A8%E7%A4%BA%E4%BE%8B.html)

转载于:https://www.cnblogs.com/move22/p/9701092.html

你可能感兴趣的文章
JSON数据检测是否正确
查看>>
hbase部署经验与坑总结
查看>>
腾讯QQ内测群新功能:QQ万人群即将袭来!
查看>>
iOS 事件处理机制与图像渲染过程
查看>>
数字是否可以被3和5同时整除,use if and % (21.9.2017)
查看>>
Warsaw University Contest Petrozavodsk, Thursday, January 31, 2008 F题,Gym100096F
查看>>
lcx端口转发 linux版
查看>>
arcgis server 10.1 发布动态图层展示海量及频繁更新的数据步骤
查看>>
strncat_s
查看>>
避免复制引用程序集的XML文件
查看>>
C IO(一般性)
查看>>
机器学习中的贝叶斯方法---先验概率、似然函数、后验概率的理解及如何使用贝叶斯进行模型预测(2)...
查看>>
SQL Server 2005 数据库 可疑状态
查看>>
L1-Day4
查看>>
搭建mocha测试环境并使用selenium进行测试
查看>>
Javascript测试之karma + mocha
查看>>
双城记开头
查看>>
烦人的幻灯片问题
查看>>
最大密度子图
查看>>
基于SSM-EasyUI的权限管理系统
查看>>