java8 日期比较_20 个案例教你在 Java 8 中如何处理日期和时间?

点击左上角蓝字,关注“SpringForAll社区”

专注分享Spring周边技术内容

bb773974c54c02e3f1421a6e0a4c9848.png

前言

前面一篇文章写了《SimpleDateFormat 如何安全的使用?》, 里面介绍了 SimpleDateFormat 如何处理日期/时间,以及如何保证线程安全,及其介绍了在 Java 8 中的处理时间/日期默认就线程安全的 DateTimeFormatter 类。那么 Java 8 中该怎么样处理生活中常见的一些日期/时间呢?比如:计算一周后的日期;计算一年前或一年后的日期;检查闰年等。

接下来创建了 20 个基于任务的实例来学习 Java 8 的新特性。从最简单创建当天的日期开始,然后创建时间及时区,接着模拟一个日期提醒应用中的任务——计算重要日期的到期天数,例如生日、纪念日、账单日、保费到期日、信用卡过期日等。

示例 1、在 Java 8 中获取今天的日期

Java 8 中的 LocalDate 用于表示当天日期。和 java.util.Date 不同,它只有日期,不包含时间。当你仅需要表示日期时就用这个类。

1LocalDate now = LocalDate.now();
2System.out.println(now);

结果是:

12018-06-20

上面的代码创建了当天的日期,不含时间信息。打印出的日期格式非常友好,不像老的 Date 类打印出一堆没有格式化的信息。

示例 2、在 Java 8 中获取年、月、日信息

LocalDate 类提供了获取年、月、日的快捷方法,其实例还包含很多其它的日期属性。通过调用这些方法就可以很方便的得到需要的日期信息,不用像以前一样需要依赖 java.util.Calendar 类了

1LocalDate now = LocalDate.now();
2int year = now.getYear();
3int monthValue = now.getMonthValue();
4int dayOfMonth = now.getDayOfMonth();
5System.out.printf("year = %d, month = %d, day = %d", year, monthValue, dayOfMonth);

结果是:

1year = 2018, month = 6, day = 20

示例 3、在 Java 8 中处理特定日期

在第一个例子里,我们通过静态工厂方法 now() 非常容易地创建了当天日期,你还可以调用另一个有用的工厂方法LocalDate.of() 创建任意日期, 该方法需要传入年、月、日做参数,返回对应的 LocalDate 实例。这个方法的好处是没再犯老 API 的设计错误,比如年度起始于 1900,月份是从 0 开始等等。日期所见即所得,就像下面这个例子表示了 6 月 20 日,没有任何隐藏机关。

1LocalDate date = LocalDate.of(2018, 06, 20);
2System.out.println(date);

可以看到创建的日期完全符合预期,与写入的 2018 年 6 月 20 日完全一致。

示例 4、在 Java 8 中判断两个日期是否相等

现实生活中有一类时间处理就是判断两个日期是否相等。你常常会检查今天是不是个特殊的日子,比如生日、纪念日或非交易日。这时就需要把指定的日期与某个特定日期做比较,例如判断这一天是否是假期。下面这个例子会帮助你用 Java 8 的方式去解决,你肯定已经想到了,LocalDate 重载了 equal 方法,请看下面的例子:

1LocalDate now = LocalDate.now();
2LocalDate date = LocalDate.of(2018, 06, 20);
3if (date.equals(now)) {
4    System.out.println("同一天");
5}

这个例子中我们比较的两个日期相同。注意,如果比较的日期是字符型的,需要先解析成日期对象再作判断。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值