java 日期比较清除一天前的数据
时间: 2023-10-26 21:24:43 浏览: 134
假设你有一个`List<Date>`类型的列表,存储了多个日期对象,现在要删除其中所有早于一天前的日期对象,可以使用以下代码:
```java
List<Date> dateList = ...; // 假设这是一个日期列表
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, -1); // 获取一天前的日期
Date oneDayBefore = calendar.getTime();
dateList.removeIf(date -> date.before(oneDayBefore));
```
上述代码中,我们使用`Calendar`类获取了一天前的日期对象`oneDayBefore`,并使用`removeIf()`方法和`before()`方法来删除列表中所有早于该日期对象的元素。执行完上述代码后,`dateList`列表中只会保留一天内的日期对象。
相关问题
java: 不兼容的类型: java.util.Date无法转换为java.sql.Date
在Java中,`java.util.Date` 和 `java.sql.Date` 是两个不同的日期类型。`java.util.Date` 是Java API中的通用日期类,它代表的是从1970年1月1日零点到现在的毫秒数,包含了时间信息。而`java.sql.Date` 是JDBC (Java Database Connectivity) 中的特有日期类型,它只包含日期部分,不包括时间。
当你尝试将一个`java.util.Date` 类型转换为`java.sql.Date` 类型时,因为它们的时间精度不同(一个是精确到毫秒,另一个仅保留日期),如果直接强制转换可能会导致数据丢失。例如,如果你有一个包含时间的`java.util.Date` 对象,它的某个时刻可能是2023年3月14日 15:30:00,但是当你将其转换为`java.sql.Date`,结果就只会保留2023年3月14日这一天。
要解决这个问题,你需要先剥离掉`java.util.Date` 的时间信息,然后将剩余的日期部分转换为`java.sql.Date`。通常的做法是在转换前先创建一个新的`java.sql.Date`,并设置它的日期值:
```java
java.util.Date utilDate = new java.util.Date(); // 示例
java.util.Calendar calendar = Calendar.getInstance();
calendar.setTime(utilDate);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
java.sql.Date sqlDate = new java.sql.Date(calendar.getTime().getTime());
```
在这个例子中,我们清除了时间部分,然后用剩下的日期创建了一个新的`java.sql.Date`。
阅读全文