Java中的时间日期类⭐️通过具体案例分析下开发中常用到的几种时间日期格式类的使用

小伙伴们大家好,系统中不少模块都要用到时间日期,来分析总结下项目中用到的些日期类

目录

一、时间日期类

        1.java.util.Calendar:

        2.java.util.Date:

        3.java.time.LocalDate、java.time.LocalTime、java.time.LocalDateTime:

二、代码样例

        2.1 LocalDate测试

        2.2 Instant测试

三、实战使用案例

​编辑

 章末


一、时间日期类

        ​​​​​​​1.java.util.Calendar

Calendar类提供了一个抽象的日历类,可以进行日期和时间的计算、格式化等操作。与Date类相比,Calendar类提供了更多的功能,并且可以处理时区等问题。但是,Calendar类在设计上存在一些缺陷,使用起来较为繁琐,例如:

  • Calendar类的API设计比较复杂,容易出错。
  • Calendar类的实现不是线程安全的,需要进行额外的同步处理。
  • Calendar类的性能比较低,因为它需要进行大量的计算。
        2.java.util.Date

Date类是Java最早引入的日期时间类,用于表示特定的时间点。它的内部实现是一个长整型数值,表示自1970年1月1日00:00:00 GMT以来经过的毫秒数。由于其内部实现的限制,Date类存在一些问题,例如:

  • Date类中的很多方法已经被废弃,不建议使用。
  • Date类不提供时区支持,因此在涉及跨时区的应用中会出现问题。
  • Date类的精度只能到毫秒级别,无法表示更精确的时间戳。
        3.java.time.LocalDatejava.time.LocalTimejava.time.LocalDateTime

LocalDateLocalTimeLocalDateTime是Java 8引入的新的日期时间类。它们分别用于表示日期、时间和日期时间。这些类提供了丰富的方法来进行日期时间的操作和计算,并且处理时区等问题更加方便。与Calendar类相比,java.time包下的日期时间类具有以下优点:

  • 设计简洁,API清晰易懂,使用起来更加方便。
  • 所有的日期时间类都是不可变的,线程安全,可以避免并发问题。
  • 支持时区、夏令时等功能,可以处理跨时区的应用场景。
  • 性能较高,比Calendar类更为快速。

二、代码样例

        2.1 LocalDate测试
public class TimeTest {

    public static void main(String[] args) {
        //获取当前日期
        LocalDate localDate = LocalDate.now();
            //2023-12-21

        //获取日期的年月日
        int year = localDate.getYear();
            //2023
        Month month = localDate.getMonth();
            //DECEMBER
        int dayOfMonth = localDate.getDayOfMonth();
            //21

        //创建指定日期
        LocalDate specialDate = LocalDate.of(2024, 12, 21);
            //2024-12-21
        LocalDateTime specialDateTime = LocalDateTime.of(2023, 12, 21,16,12,30);
            //2023-12-21T16:12:30

        //日期格式化输出
        String formatDate = specialDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
            //2023-12-21

        //日期运算,加七天
        LocalDate localDatePlus = specialDate.plusDays(7);
            //2023-12-28

        //判断日期先后
        boolean isBefore = localDatePlus.isBefore(localDate);
            //false

        //日期间隔
        long daysBetween = ChronoUnit.DAYS.between(localDate, localDatePlus);
            //7
    }
}
        2.2 Instant测试
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;

public class InstantTimeTest {
    public static void main(String[] args) {
        //获取当前时间戳
        Instant now = Instant.now();
            //2023-12-21T08:24:31.903Z

        //创建指定时间戳
        Instant milli = Instant.ofEpochMilli(1639999999000L);
            //2021-12-20T11:33:19Z

        //时间戳格式化输出
        String s = milli.toString();
            //2021-12-20T11:33:19Z

        //时间戳与日期时间的转换
        LocalDateTime localDateTime = LocalDateTime.ofInstant(milli, ZoneId.systemDefault());
            //2021-12-20T19:33:19
        Instant instant = localDateTime.toInstant(ZoneOffset.UTC);
            //2021-12-20T19:33:19Z

    }
}

三、实战使用案例

        需要计算现在到24年双11之间相隔的天数,并且需要排除周六和周日这两天。

首先,我们可以使用LocalDate类来表示起始日期和结束日期,然后使用循环遍历这两个日期之间的每一天,判断该天是否是周六或周日,如果不是,则将天数加1。

public class SumDays {
    public static void main(String[] args) {
        LocalDate now = LocalDate.of(2023, 12, 21);
        LocalDate end = LocalDate.of(2024, 11, 11);

        int days = 0;
        LocalDate localDate = now;
        while(localDate.isBefore(end) || localDate.isEqual(end)){
            if(localDate.getDayOfWeek() != DayOfWeek.SATURDAY && localDate.getDayOfWeek() != DayOfWeek.SUNDAY){
                days ++;
            }
            localDate = localDate.plusDays(1);
        }
        System.out.println("现在的日期是:"+now+ "  到2024年双11相隔天数(不包括周六周日):"+days);

    }
}

 章末

        文章到这里就结束了 


  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在比萨斜塔吃披萨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值