Date-Time API简介

在Java8之前的版本中,我们处理时间类型常常使用的是java.util包下的Date类。但使用Date类却有诸多的弊端,如: java.util.Date 是非线程安全的,所有的日期类都是可变的;日期/时间类的定义并不一致,在java.util和java.sql的包下都含有Date类,在开发过程中极易出错; 日期类并不提供国际化,没有时区支持。为了解决以上问题,Java8在java.time 包下提供了很多新的 API,常用的类包括LocalDate、LocalTime、LocalDateTime,用以处理日期,时间,日期/时间等

LocalDate类

LocalDate是一个不可变类,在不考虑时区的情况下可以对日期(不包括时间)进行各种操作,它的默认格式是yyyy-MM-dd
获取当前日期以及年、月、日
代码示例:

//获取当前日期以及年、月、日
LocalDate localDate = LocalDate.now();
int year = localDate.getYear();
int month = localDate.getMonthValue();
int day = localDate.getDayOfMonth();
System.out.println("当前日期:" + localDate);
System.out.println("年:" + year + "  月:" + month + "  日:" + day);

运行结果:

当前日期:2018-12-12
年:2018  月:12  日:12

获取指定的日期
代码示例:

//获取指定的日期
LocalDate specifiedDay = LocalDate.of(2008, 8, 18);
System.out.println("指定日期:" + specifiedDay);

运行结果:

指定日期:2008-08-18

使用DateTimeFormatter进行日期格式化
代码示例:

//使用DateTimeFormatter类进行日期格式化
LocalDate localDate = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
System.out.println("格式化后的日期:" + formatter.format(localDate));//将字符串转为LocalDate类型
LocalDate newDate =LocalDate.parse("2018年12月12日", formatter);
System.out.println("字符串转日期类型:" + newDate);

运行结果:

格式化后的日期:2018年12月12日
字符串转日期类型:2018-12-12

比较两个时间的先后顺序以及是否相等
代码示例:

LocalDate localDate = LocalDate.now();
LocalDate otherDate = LocalDate.of(2018, 11, 11);//equals方法用于比较两个日期是否相等
if(localDate.equals(otherDate)) {System.out.println("localDate与otherDate相等!");
} else {//isAfter和isBefore方法用于比较两个日期前后顺序if(localDate.isAfter(otherDate)) {System.out.println("localDate晚于otherDate!");}if(localDate.isBefore(otherDate)) {System.out.println("localDate早于otherDate!");}
}

运行结果:

localDate晚于otherDate!

对日期做加减运算
代码示例:

LocalDate localDate = LocalDate.now();
System.out.println("2年后日期:" + localDate.plusYears(2));
System.out.println("6月后日期:" + localDate.plusMonths(6));
System.out.println("3周后日期:" + localDate.plusWeeks(3));
System.out.println("15天后日期:" + localDate.plusDays(15));System.out.println("2年前日期:" + localDate.minusYears(2));
System.out.println("6月前日期:" + localDate.minusMonths(6));
System.out.println("3周前日期:" + localDate.minusWeeks(3));
System.out.println("15天前日期:" + localDate.minusDays(15));

运行结果:

2年后日期:2020-12-12
6月后日期:2019-06-12
3周后日期:2019-01-02
15天后日期:2018-12-272年前日期:2016-12-12
6月前日期:2018-06-12
3周前日期:2018-11-21
15天前日期:2018-11-27

获取日期间隔的天数
代码示例:

//获取某年份的第N天的日期
LocalDate specialDay = LocalDate.ofYearDay(2018, 100);
System.out.println("2018年的第100天:" + specialDay);
//获取两个日期的间隔天数
long intervalDay = localDate.toEpochDay() - specialDay.toEpochDay();
System.out.println("间隔天数: " + intervalDay);

运行结果:

2018年的第100天:2018-04-10
间隔天数:246

LocalTime类

LocalTime与LocalDate一样,也是一个不可变的类,默认格式是hh:mm:ss.zzz,它提供了对时间的各种操作
获取当前时间以及自定义时间
代码示例:

//获取当前时间、时、分、秒以及自定义时间
LocalTime localTime = LocalTime.now();
int hour = localTime.getHour();
int minute = localTime.getMinute();
int second = localTime.getSecond();
System.out.println("当前时间:" + localTime);
System.out.println("时:" + hour + "  分:" + minute + "  秒:" + second);//获取自定义时间
LocalTime specifiedTime = LocalTime.of(15, 30, 45);
System.out.println("自定义时间:" + specifiedTime);

运行结果:

当前时间:13:45:59.039
时:13  分:45  秒:59
自定义时间:15:30:45

使用DateTimeFormatter进行时间格式化
代码示例:

//使用DateTimeFormatter类进行时间格式化
LocalTime localTime = LocalTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH时mm分ss秒");
System.out.println("格式化后的时间:" + formatter.format(localTime));//将字符串转为LocalTime类型
LocalTime newTime = LocalTime.parse("20时35分45秒", formatter);
System.out.println("字符串转时间类型:" + newTime);

运行结果:

格式化后的时间:20时38分33秒
字符串转时间类型:20:35:45

比较两个时间的先后顺序
代码示例:

//equals方法比较两个时间是否相等
if(localTime.equals(specifiedTime)) {System.out.println("localTime与specifiedTime相等!");
} else {//isAfter、isBefore方法比较两个时间的先后顺序if(localTime.isAfter(specifiedTime)) {System.out.println("localTime晚于specifiedTime!");}if(localTime.isBefore(specifiedTime)) {System.out.println("localTime早于specifiedTime!");}
}

运行结果:

localTime早于specifiedTime!

对时间做加减运算
代码示例:

LocalTime localTime = LocalTime.now();
System.out.println("当前时间:" + localTime);
System.out.println("2小时后时间:" + localTime.plusHours(2));
System.out.println("30分钟后时间:" + localTime.plusMinutes(30));
System.out.println("500秒后日时间:" + localTime.plusSeconds(500));System.out.println("2小时前时间:" + localTime.minusHours(2));
System.out.println("30分钟前时间:" + localTime.minusMinutes(30));
System.out.println("500秒前时间:" + localTime.minusSeconds(500));

运行结果:

当前时间:14:10:15.666
2小时后时间:16:10:15.666
30分钟后时间:14:40:15.666
500秒后时间:14:18:35.6662小时前时间:12:10:15.666
30分钟前时间:13:40:15.666
500秒前时间:14:01:55.666

LocalDateTime类

LocalDateTime是一个不可变的日期-时间对象,它既包含了日期同时又含有时间,默认格式是yyyy-MM-ddTHH-mm-ss.zzz
获取当前日期时间以及自定义日期时间
示例代码:

 //获取当前的日期时间
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("当前的日期时间:" + localDateTime);//获取自定义的的日期时间
LocalDateTime specifiedDateTime = LocalDateTime.of(LocalDate.now(), LocalTime.now());
System.out.println("自定义的日期时间:" + specifiedDateTime);

运行结果:

当前的日期时间:2018-12-12T14:31:00.163
自定义的日期时间:2018-12-12T14:31:00.164

转化为日期和时间
代码示例:

//转化为LocalDate和LocalTime
LocalDate localDate = localDateTime.toLocalDate();
LocalTime localTime = localDateTime.toLocalTime();
System.out.println("当前日期:" + localDate);
System.out.println("当前时间:" + localTime);

运行结果:

当前日期:2018-12-12
当前时间:14:31:00.163

转载于:https://www.cnblogs.com/liantdev/p/10108504.html

java 8 新特性之日期-时间 API相关推荐

  1. 重学Java8新特性(四) : 日期时间API、LocalDateTime、DateTimeFormatter、开发中时间工具类(常用)

    文章目录 一.JDK8中日期时间API的介绍 1.1.LocalDate.LocalTime.LocalDateTime的使用 2.2.Instant类的使用 2.3.DateTimeFormatte ...

  2. java 纳秒 格式化_Java日期时间API系列35-----Jdk8中java.time包中的新的日期时间API类应用,微秒和纳秒等更精确的时间格式化和解析。...

    通过Java日期时间API系列1-----Jdk7及以前的日期时间类中得知,Java8以前除了java.sql.Timestamp扩充纳秒,其他类最大只精确到毫秒:Java8 time包所有相关类都支 ...

  3. java8 日期api_我们多么想要新的Java日期/时间API?

    java8 日期api 当前的Java.net 民意测验问题是:" 对于用Java 8实现的JSR-310(新的日期和时间API)有多重要? "在我撰写本文时,将近150位受访者投 ...

  4. 我们多么想要新的Java日期/时间API?

    当前的Java.net 民意测验问题是:" 对于用Java 8实现的JSR-310(新的日期和时间API)有多重要? "在我撰写本文时,将近150位受访者投了赞成票,绝大多数人回答 ...

  5. 6 日期字符串转日期_Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类...

    因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...

  6. JDK8新特性(十四)之日期时间API

    旧版日期时间API存在的问题: 1. 设计很差: 在java.util和java.sql的包中都有日期类,java.util.Date同时包含日期和时间,而java.sql.Date仅包含日期.此外用 ...

  7. java 包结构 枚举类_Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类...

    因为Jdk7及以前的日期时间类的不方便使用问题和线程安全问题等问题,2005年,Stephen Colebourne创建了Joda-Time库,作为替代的日期和时间API.Stephen向JCP提交了 ...

  8. 高级JAVA开发必备技能:java8 新日期时间API((一)JSR-310:ZoneId 时区和偏移量)(JAVA 小虚竹)

    技术活,该赏 点赞再看,养成习惯 大家好,我是小虚竹.之前有粉丝私聊我,问能不能把JAVA8 新的日期时间API(JSR-310)知识点梳理出来.答案是肯定的,谁让我宠粉呢.由于内容偏多(超十万字了) ...

  9. 详解Java8特性之新的日期时间 API

    #吐槽 Java 8 提供了一套新的日期时间 API,为什么要这么干呢.因在旧版的 Java 中,日期时间 API 存在很多问题,比如说线程安全问题了, java.util.Date 是非线程安全的, ...

最新文章

  1. android intent例程,Android开发(四)| 探究活动(详解Intent+大量实例)
  2. 二叉树 —— 中序遍历结点的后继
  3. 在VMware运行Linux下,密码错误的原因
  4. boost::hana::make_lazy用法的测试程序
  5. 工信部印发《信息安全产业“十二五”发展规划》
  6. android预加载app,Android欢迎页预加载首页数据
  7. 阿里云MVP第六期发布——覆盖全球20多个国家和地区,成为数字化转型的中坚力量...
  8. Lintcode1 A+B Problem solution 题解
  9. PVS-Studio C/C++/C++11 静态代码分析工具
  10. 放弃 802.11 命名方式,Wi-Fi 6 标准公布,速度快 37%
  11. 二进制中 1 的个数
  12. JavaScript HTML DOM 元素(节点)
  13. #PYTHON#数据模型
  14. 【2021最新版】Java基础面试题总结(70道题含答案解析)
  15. T - 地狱之门 (URAL - 1036 )
  16. [半监督学习] Combining Labeled and Unlabeled Data with Co-Training
  17. 3dmax制作电视机
  18. 个人或小微企业网络从IPv4升级到IPv6/v4硬件配置及注意事项
  19. 【精选】小白是如何挖漏洞的(技巧篇)
  20. 字节跳动李航入选ACL Fellow,他曾这样看待机器学习

热门文章

  1. 组件局域网中的无集线器、Windows XP、Windows 7、Windows 8的对等网
  2. java String部分源码解析
  3. hpunix下11gRac的安装
  4. [总结]DataGrid 固定表头实现(纵向和横向滚动条滚动,而Header不动)
  5. Java技术栈---语言基础
  6. java 算法优化向导
  7. Thymeleaf3语法详解
  8. 算法 --- 平衡二叉树
  9. 学习React的一知半解
  10. Python-爬虫-requests