前言
介绍了三种日期类型以及他们的日期加减
什么是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类型进行加减操作。具体操作如下:
- 加法操作:
我们可以使用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);
结果:
- 减法操作:
我们可以使用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对象,原有的对象并不会被修改。因此,我们需要将新的对象保存起来或者直接使用它。
需要注意的一点是,Period
和Duration
是不同的时间量单位。Period
是以年、月、日的方式表示时间间隔,而Duration
是以秒、毫秒、纳秒等为单位表示时间间隔。因此,在使用plusXXX()
和minusXXX()
方法的时候,需要根据具体情况选择合适的时间量类型。
Calendar加减
在Java中,我们可以使用Calendar
类型进行加减操作。具体操作如下:
- 加法操作:
我们可以使用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());
结果:
- 减法操作:
我们可以使用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
中的LocalDate
、LocalTime
、LocalDateTime
等类型来替代Date
类型。
不过如果你仍然需要使用Date
类型进行加减操作,可以按照以下步骤进行:
- 通过
getTime()
方法将Date
类型转换为毫秒数,进行加减操作:
Date date = new Date(); //默认当前时间
long time = date.getTime(); // 获取毫秒数
time += 24 * 60 * 60 * 1000; // 加1天,单位为毫秒
date.setTime(time); // 将毫秒数转换为Date类型
System.out.println(date);
结果:
- 通过
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
类型。
总结
- LocalDateTime是Java 8中的一个类,表示不带时区的日期和时间。
- Calendar是一个用于处理日期和时间的类,它提供了许多方法来获取和设置日期、时间以及执行日期和时间的计算操作。
- Date是表示日期和时间的类。它是Java提供的最早的日期和时间类之一,用于表示从1970年1月1日 00:00:00 GMT(格林尼治标准时间)开始经过的毫秒数。
日期的加减这就不用过多总结了,用法都是固定的。