专栏首页微信公众号:Java团长Java8新特性之日期-时间API

Java8新特性之日期-时间API

来源:cnblogs.com/liantdev/p/10108504.html

在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

比较两个时间的先后顺序以及是否相等

代码示例:

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-27

2年前日期: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

比较两个时间的先后顺序

代码示例:

//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.666

2小时前时间: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

本文分享自微信公众号 - Java团长(javatuanzhang)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 20个高级Java面试题汇总

    这是一个高级Java面试系列题中的第一部分。这一部分论述了可变参数,断言,垃圾回收,初始化器,令牌化,日期,日历等等Java核心问题。

    Java团长
  • 关于三次握手与四次挥手面试官想考什么?

    在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握...

    Java团长
  • Java里如何实现线程间通信?

    假设有两个线程,一个是线程 A,另一个是线程 B,两个线程分别依次打印 1-3 三个数字即可。我们来看下代码:

    Java团长
  • Java8 新特性之日期-时间 API

    在Java8之前的版本中,我们处理时间类型常常使用的是java.util包下的Date类。

    好好学java
  • 显示出Jar文件中的所有目录名和文件名,也显示Manifest.mf文件所有属性 JavaJDKF#

    //功能:显示出Jar文件中的所有目录名和文件名,同时也显示META-INF/Manifest.mf文件中的所有属性 //用法:提供Jar文件的路径信息 //例...

    阿敏总司令
  • java异常分类和处理

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    chenchenchen
  • 《Java从入门到放弃》JavaSE入门篇:异常

    十方上下
  • 感觉JVM的默认异常处理不够好,既然不好那我们就自己来处理异常呗!那么如何自己处理异常呢?

    * 如果程序出现了问题,我们没有做任何处理,最终JVM会做出默认的处理。 * 把异常的名称、原因及出现的位置等信息输出在控制台。同时会结束程序。 * ...

    黑泽君
  • java字符串操作

    说故事的五公子
  • Java 中 Redis 五大基本类型的用法

    芋道源码

扫码关注云+社区

领取腾讯云代金券