0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

java 8的日期用法

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-09 15:50 次阅读

java 已经出到 17 了,而小编还在用 8 的版本,在 8 中已经推出了新的日期 API,不在使用 。java.time 包下提供了用于日期、时间、实例和周期的主要 API。

获取今天日期

LocalDate 存储了日期,如:2022-01-09,它不包含时间。

public static void main(String[] args) {
    LocalDate now = LocalDate.now();
    System.out.println(now);
}

设置日期

of 方法是一个静态方法,接收年、月、日三个 int 参数,返回 LocalDate 对象。需要注意的是月份不是从 0 开始的。

public static void main(String[] args) {
    LocalDate date = LocalDate.of(2022,1,9);
    System.out.println(date);
}

日期判断

日期操作第一个会想到的就是两个日期是否相等的操作

public static void main(String[] args) {
    LocalDate date = LocalDate.of(2022,1,10);
    LocalDate today = LocalDate.now();
    if(date.equals(today)) {
        System.out.println("日期相等");
    } else {
        System.out.println("日期不相等");
    }
}

当前日期是否早于、晚于另外的日期,使用 isAfter() 和 isBefore() 方法。

public static void main(String[] args) {
    LocalDate today = LocalDate.now();
    LocalDate date = LocalDate.of(2022,1,9);
    if(today.isAfter(date)) {
        System.out.println("今天已经晚了");
    } else {
        System.out.println("今天还早");
    }

    if(today.isBefore(date)) {
        System.out.println("今天在前面");
    } else {
        System.out.println("今天在后面");
    }

}

匹配周期性的日期

在某些业务中,每年、每月、每周都会有一个特定的日期,比如每个月的账单日、每年的生日等日期,这时就不能把年、月等放入日期比较。可以使用 DayOfWeek、MonthDay、YearMonth 类处理这类日期。

public static void main(String[] args) {
    LocalDate date = LocalDate.of(2022,1,9);
    MonthDay monthDay = MonthDay.of(date.getMonth(), date.getDayOfMonth());
    MonthDay today = MonthDay.from(LocalDate.now());
    if(today.equals(monthDay)) {
        System.out.println("今天已经到特定的日期了");
    } else {
        System.out.println("今天还没有到特定的日期");
    }
}

一周、月、年前、后的日期

ChronoUnit 是用来表示时间的单位,比如:ChronoUnit.YEARS 年,ChronoUnit.WEEKS 周。minus()、plus() 方法用来减去、加上一个时间周期。

public static void main(String[] args) {

        LocalDate today = LocalDate.now();
        LocalDate preWeek = today.minus(1, ChronoUnit.WEEKS);
        System.out.println(preWeek);

        LocalDate afterWeek = today.plus(1, ChronoUnit.WEEKS);
        System.out.println(afterWeek);

        LocalDate preMon = today.minus(1, ChronoUnit.MONTHS);
        System.out.println(preMon);

        LocalDate afterMon = today.plus(1, ChronoUnit.MONTHS);
        System.out.println(afterMon);

        LocalDate preYear = today.minus(1, ChronoUnit.YEARS);
        System.out.println(preYear);

        LocalDate afterYear = today.plus(1, ChronoUnit.YEARS);
        System.out.println(afterYear);

    }

日期间隔

计算两个日期的间隔了多少天、月是一个很常规的业务操作。月是用 Period 类计算,天使用 LocalDate 的 toEpochDay() 方法计算。

public static void main(String[] args) {
    LocalDate today = LocalDate.now();
    LocalDate date = LocalDate.of(2022,4,10);
    Period period = Period.between( date,today);
    System.out.println("间隔了" + period.getMonths() + "月");
    System.out.println("间隔了" + (today.toEpochDay() - date.toEpochDay()) + "天");

}

时间戳

Instant 类有一个静态工厂方法now()会返回当前的时间戳。

public static void main(String[] args) {
    Instant instant = Instant.now();
    System.out.println(instant);
    System.out.println(instant.toEpochMilli());
}

格式化日期

DateTimeFormatter 是一个线程安全的日期和时间格式化器,下面是用 DateTimeFormatter.BASIC_ISO_DATE 将 20210109 格式化成了 2021-01-09。

public static void main(String[] args) {
    String str = "20210109";
    LocalDate formatted = LocalDate.parse(str, DateTimeFormatter.BASIC_ISO_DATE);
    System.out.println("格式化后的日期为:  "+ formatted);
}

DateTimeFormatter 也可以自定义格式化字符串。

public static void main(String[] args) {
    String str = "09012021";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMddyyyy");
    LocalDate date = LocalDate.parse(str, formatter);
    System.out.print(date);
}

是否为闰年

小编在学程序之初被闰年折磨的死去活来,给个年份计算是不是闰年。java 8 的 isLeapYear() 就很好的解决了这个问题。

public static void main(String[] args) {
    LocalDate today = LocalDate.now();
    if(today.isLeapYear()){
        System.out.println("闰年");
    }else {
        System.out.println("不是闰年");
    }

}

日期转字符串

上面格式化的例子是将字符串转为日期,下面是将日期转为字符串。

public static void main(String[] args) {
    LocalDate now = LocalDate.now();
    DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    String str = now.format(format);
    System.out.print(str);
}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2966

    浏览量

    104696
  • API
    API
    +关注

    关注

    2

    文章

    1496

    浏览量

    61950
  • 格式化
    +关注

    关注

    2

    文章

    39

    浏览量

    9112
收藏 人收藏

    评论

    相关推荐

    Java多线程的用法

    本文将介绍一下Java多线程的用法。 基础介绍 什么是多线程 指的是在一个进程中同时运行多个线程,每个线程都可以独立执行不同的任务或操作。 与单线程相比,多线程可以提高程序的并发性和响应
    的头像 发表于 09-30 17:07 946次阅读

    常见的几种日期对象用法

    前言 LocalDateTime、LocalDate、LocalTime 是 Java8 全新的日期框架,加强了对时间的管理,有很多特别好用的时间运算方法,而且是线程安全的,较之
    的头像 发表于 09-25 11:10 740次阅读
    常见的几种<b class='flag-5'>日期</b>对象<b class='flag-5'>用法</b>

    整理一下ElementUI+VUE日期控件禁用用法

    今天给大家整理一下ElementUI+VUE 日期控件禁用用法,希望对大家有所帮助!HTML文件
    发表于 01-18 09:35

    JAVA教程之时间日期服务器

    JAVA教程之时间日期服务器,很好的JAVA的资料,快来学习吧
    发表于 04-11 17:28 7次下载

    java并发编程实战之辅助类用法

    二.CyclicBarrier用法 三.Semaphore用法 若有不正之处请多多谅解,并欢迎批评指正。 一.CountDownLatch用法 CountDownLatch类位于java
    发表于 09-27 16:50 0次下载

    java8新特性

    java8为接口声明添加非抽象方法的实现,也成为拓展方法。
    发表于 11-27 15:54 1743次阅读

    java final关键字用法技巧汇总解析

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字。另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法
    发表于 12-01 11:02 1119次阅读
    <b class='flag-5'>java</b> final关键字<b class='flag-5'>用法</b>技巧汇总解析

    Java数组的常用方法_Java:数组工具类Arrays类的常用方法的用法及代码

    本文主要详细介绍了Java数组的常用方法以及数组工具类Arrays类的常用方法的用法及代码。
    发表于 01-29 10:25 2918次阅读

    java日期结果与操作系统时间相差8小时处理解决方法说明

    本文档的主要内容详细介绍的是java日期结果与操作系统时间相差8小时处理解决方法说明。最近有遇到java的时间不对的事件,现象:通过java
    发表于 01-22 11:10 8次下载
    <b class='flag-5'>java</b>新<b class='flag-5'>日期</b>结果与操作系统时间相差<b class='flag-5'>8</b>小时处理解决方法说明

    如何正确区分Java中super函数用法

    Java中super函数有很多方法,在使用的时候我们应该如何正确区分? 2 方法 三种用法: 访问父类的方法。 调用父类构造方法。 访问父类中的隐藏成员变量。
    的头像 发表于 02-21 15:08 561次阅读

    Java枚举的特点及用法

    Java 枚举出现之前,通常会使用常量类来表示一组固定的常量值,直到Java 1.5之后推出了枚举,那么枚举类型有哪些特点,它比常量类又好在哪里呢。 本文将分析一下枚举的特点及用法。 1.
    的头像 发表于 09-30 10:02 1436次阅读

    this关键字在Java中的用法

    this 关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。 其实简单来说 this 关键字就是表示当前对象,下面我们来具体介绍 this 关键字在Java中的用法。 1、调用成员变量
    的头像 发表于 10-10 16:49 573次阅读
    this关键字在<b class='flag-5'>Java</b>中的<b class='flag-5'>用法</b>

    sql中日期函数的用法

    日期函数在SQL中是非常重要的功能之一,它们能帮助我们在数据库中存储和处理日期和时间数据。在本文中,我将详细介绍一些常用的SQL日期函数,包括如何创建日期和时间数据、如何格式化和转换
    的头像 发表于 11-17 16:24 1041次阅读

    java字符串转化为日期格式

    Java中,字符串转化为日期格式是一个常见的需求。日期格式在处理时间相关的操作时非常重要,它可以用来表示一段时间的开始和结束,也可以用来计算时间差等。本文将详细介绍如何将一个字符串转化为日期
    的头像 发表于 11-17 16:38 2991次阅读

    java中obj类型的实战用法

    类型具有许多实战用法,下面将详细介绍一些常见的使用场景。 作为方法参数和返回值的类型 在Java中,可以使用obj类型作为方法的参数或返回值类型。这种用法可以使方法具有更广泛的适用性,因为obj类型可以接受任何对象作为参数或返回
    的头像 发表于 11-21 10:27 761次阅读