最近在做项目的时候用到Date和Calendar比较多,而且用到的方式也比较全,突然想到一个问题,Java如何获取Date的"昨天"与"明天",也就是前一天和后一天呢?思考后写出了方法,想着万一以后用到,就总结出来,也方便有需要的朋友们参考借鉴,下面来一起看看吧。 在Java编程中,处理日期和时间是常见的任务之一。`java.util.Date`是Java标准库中用于表示日期的原始类,但随着Java的发展,`java.time`包中的类(如`LocalDate`)成为了更推荐的选择。不过,在某些场景下,我们仍然需要使用`Date`和`Calendar`来处理日期。本文将详细介绍如何使用`Calendar`类获取`Date`对象的“昨天”和“明天”。 `Date`类中的一些方法如`getYear()`、`getMonth()`已经被废弃,因此我们需要借助`Calendar`类来获取和修改日期。`Calendar`是一个抽象类,提供了日期和时间的计算功能,可以方便地进行日期的加减操作。 以下是一个使用`Calendar`获取“昨天”和“明天”的示例代码: ```java import java.util.Calendar; import java.util.Date; public class DateExample { @Test public void dateTest() { Date today = new Date(); for (int i = 0; i < 10; i++) { today = yesterday(today); System.out.println(today); } System.out.println("------------"); for (int i = 0; i < 10; i++) { today = tomorrow(today); System.out.println(today); } } /** * 返回昨天 * @param today * @return */ public Date yesterday(Date today) { Calendar calendar = Calendar.getInstance(); calendar.setTime(today); calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 1); return calendar.getTime(); } /** * 返回明天 * @param today * @return */ public Date tomorrow(Date today) { Calendar calendar = Calendar.getInstance(); calendar.setTime(today); calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) + 1); return calendar.getTime(); } } ``` 在这个例子中,我们创建了两个方法`yesterday()`和`tomorrow()`,分别用于获取给定日期的前一天和后一天。这两个方法的核心在于使用`Calendar.getInstance()`创建一个`Calendar`实例,然后通过`setTime()`方法设置当前日期。接下来,我们通过`set()`方法改变`Calendar`对象中的日期字段,增加或减少一天。使用`getTime()`方法将修改后的`Calendar`对象转换回`Date`对象并返回。 在`dateTest()`方法中,我们打印了连续10天的“昨天”和“明天”,以展示这两个方法的正确性。 值得注意的是,虽然这里演示了如何使用`Date`和`Calendar`完成这个任务,但在Java 8及以上版本,推荐使用`java.time`包中的`LocalDate`类。例如,获取“昨天”和“明天”可以简化为: ```java import java.time.LocalDate; import java.time.ZoneId; import java.util.Date; public class LocalDateExample { public static void main(String[] args) { LocalDate today = LocalDate.now(); for (int i = 0; i < 10; i++) { System.out.println(today.minusDays(1)); today = today.minusDays(1); } System.out.println("------------"); today = LocalDate.now(); for (int i = 0; i < 10; i++) { System.out.println(today.plusDays(1)); today = today.plusDays(1); } } } ``` `LocalDate`类提供了`minusDays()`和`plusDays()`方法,可以直接进行日期的加减操作,更加简洁直观。 无论是使用`Date`和`Calendar`,还是使用`java.time.LocalDate`,Java都提供了多种方式来获取日期的前一天和后一天。选择哪种方式取决于你的项目需求和所使用的Java版本。如果你还在使用Java 7及更低版本,那么`Calendar`可能是最佳选择;如果是在Java 8及以上,`LocalDate`则提供了更好的API设计和易用性。
- 粉丝: 3
- 资源: 946
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 5G SRM815模组原理框图.jpg
- T型3电平逆变器,lcl滤波器滤波器参数计算,半导体损耗计算,逆变电感参数设计损耗计算 mathcad格式输出,方便修改 同时支持plecs损耗仿真,基于plecs的闭环仿真,电压外环,电流内环
- 毒舌(解锁版).apk
- 显示HEX、S19、Bin、VBF等其他汽车制造商特定的文件格式
- 8bit逐次逼近型SAR ADC电路设计成品 入门时期的第三款sarADC,适合新手学习等 包括电路文件和详细设计文档 smic0.18工艺,单端结构,3.3V供电 整体采样率500k,可实现基
- 操作系统实验 ucorelab4内核线程管理
- 脉冲注入法,持续注入,启动低速运行过程中注入,电感法,ipd,力矩保持,无霍尔无感方案,媲美有霍尔效果 bldc控制器方案,无刷电机 提供源码,原理图
- Matlab Simulink#直驱永磁风电机组并网仿真模型 基于永磁直驱式风机并网仿真模型 采用背靠背双PWM变流器,先整流,再逆变 不仅实现电机侧的有功、无功功率的解耦控制和转速调节,而且能实
- 157389节奏盒子地狱模式第三阶段7.apk
- 操作系统实验ucore lab3