java中LocalDateTime、Calendar、Date三种时间类型进行加减

前言

介绍了三种日期类型以及他们的日期加减

什么是LocalDateTime

LocalDateTime是Java 8中的一个类,表示不带时区的日期和时间。它是java.time包中的一个类,用于处理日期和时间的操作。

LocalDateTime包含日期和时间的信息,不包含时区信息。它提供了各种方法来获取和操作日期和时间的各个部分,例如年、月、日、时、分、秒等。

与其他日期和时间类相比,LocalDateTime主要用于处理本地日期和时间的操作。它适合用于应用程序中不涉及时区转换的场景,例如计算两个日期之间的间隔、格式化日期和时间等。

什么是Calendar

在Java中,Calendar是一个用于处理日期和时间的类。它提供了许多方法来获取和设置日期、时间以及执行日期和时间的计算操作。使用Calendar类,可以执行各种常见的日期和时间操作,如获取当前日期和时间、计算两个日期之间的差异、添加或减去指定数量的年、月、日、小时、分钟等等。

Calendar类是一个抽象类,通过调用其静态方法getInstance()来获取一个Calendar对象的实例。可以使用Calendar对象来获取和设置年、月、日、小时、分钟、秒等日期和时间的具体值。此外,Calendar类还提供了一些方便的方法来执行日期和时间的计算、比较和格式化等操作。

什么是Date

在Java中,Date是表示日期和时间的类。它是Java提供的最早的日期和时间类之一,用于表示从1970年1月1日 00:00:00 GMT(格林尼治标准时间)开始经过的毫秒数。

Date类可以用于获取和设置日期和时间的值,执行日期和时间的计算和比较操作。它提供了多个构造方法,可以根据传入的参数来创建Date对象,包括指定年、月、日、小时、分钟、秒数等等。

LocalDateTime类型加减

在Java中,我们可以使用LocalDateTime类型进行加减操作。具体操作如下:

  1. 加法操作:

我们可以使用plusXXX()方法进行加法操作,在方法中传入一个时间量Duration或者Period。

例如:

LocalDateTime now = LocalDateTime.now(); //默认当前时间
LocalDateTime after = now.plusDays(1);  // 加1天
LocalDateTime before = now.plusHours(-3);  // 减3小时
System.out.println(after);
System.out.println(before);

结果:
在这里插入图片描述

  1. 减法操作:

我们可以使用minusXXX()方法进行减法操作,在方法中传入一个时间量Duration或者Period。

例如:

LocalDateTime now = LocalDateTime.now(); //默认当前时间
LocalDateTime before = now.minusDays(1);  // 减1天
LocalDateTime after = now.minusHours(-3);  // 减3小时
System.out.println(before);
System.out.println(after);

结果:
在这里插入图片描述

值得注意的是,plusXXX()minusXXX()方法会返回一个新的LocalDateTime对象,原有的对象并不会被修改。因此,我们需要将新的对象保存起来或者直接使用它。

需要注意的一点是,PeriodDuration是不同的时间量单位。Period是以年、月、日的方式表示时间间隔,而Duration是以秒、毫秒、纳秒等为单位表示时间间隔。因此,在使用plusXXX()minusXXX()方法的时候,需要根据具体情况选择合适的时间量类型。

Calendar加减

在Java中,我们可以使用Calendar类型进行加减操作。具体操作如下:

  1. 加法操作:

我们可以使用add()方法进行加法操作,在方法中传入一个时间单位和该单位需要增加的数量。

例如:

Calendar cal = Calendar.getInstance(); //默认当前时间
cal.add(Calendar.DATE, 1);  // 加1天
cal.add(Calendar.HOUR_OF_DAY, -3);  // 减3小时  // 减3小时
System.out.println(cal.getTime());

结果:
在这里插入图片描述

  1. 减法操作:

我们可以使用add()方法进行减法操作,在方法中传入一个时间单位和该单位需要减少的数量。需要注意的是,由于add()方法没有提供减法操作的直接实现,因此需要传入负数来实现减法操作。

例如:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);  // 减1天
cal.add(Calendar.HOUR_OF_DAY, 3);  // 加3小时,实现减法操作需传入负数-3
System.out.println(cal.getTime());

结果:
在这里插入图片描述

需要注意的一点是,由于Calendar类型是线程不安全的,因此在多线程环境下使用时需要进行同步操作,或者使用线程安全的ThreadLocal来存储Calendar实例。

另外,从Java 8开始,建议使用java.time包中的新型日期时间API(例如LocalDateTime)来替代Calendar类型,因为新型API更加易用、更加清晰,同时也更加符合现代编程的需求。

Date类型加减

在Java中,我们可以使用java.util.Date类型进行加减操作。但是需要注意的是,Date类型存在一些缺陷和问题,例如时区不支持、可变性等问题。

因此,从Java 8开始,建议使用新型日期时间APIjava.time中的LocalDateLocalTimeLocalDateTime等类型来替代Date类型。

不过如果你仍然需要使用Date类型进行加减操作,可以按照以下步骤进行:

  1. 通过getTime()方法将Date类型转换为毫秒数,进行加减操作:
Date date = new Date(); //默认当前时间
long time = date.getTime();  // 获取毫秒数
time += 24 * 60 * 60 * 1000;  // 加1天,单位为毫秒
date.setTime(time);  // 将毫秒数转换为Date类型
System.out.println(date);

结果:
在这里插入图片描述

  1. 通过Calendar类型进行加减操作:
Date date = new Date(); //默认当前时间
Calendar cal = Calendar.getInstance();
cal.setTime(date);  // 将Date类型转换为Calendar类型
cal.add(Calendar.DATE, 1);  // 加1天
date = cal.getTime();  // 将Calendar类型转换为Date类型
System.out.println(date);

结果:
在这里插入图片描述

需要注意的一点是,由于Date类型存在可变性的问题,不建议在多线程环境下进行操作,可以考虑使用线程安全的ThreadLocal来存储Date实例。同时,在Java 8之前的版本中,也可以考虑使用第三方日期时间库Joda-Time来替代Date类型。

总结

  1. LocalDateTime是Java 8中的一个类,表示不带时区的日期和时间。
  2. Calendar是一个用于处理日期和时间的类,它提供了许多方法来获取和设置日期、时间以及执行日期和时间的计算操作。
  3. Date是表示日期和时间的类。它是Java提供的最早的日期和时间类之一,用于表示从1970年1月1日 00:00:00 GMT(格林尼治标准时间)开始经过的毫秒数。

日期的加减这就不用过多总结了,用法都是固定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值