下面以实际的问题为例,去了解 java 中时间戳相关的类与方法。
如何获取某一个 Timestamp 前一天的 Timestamp ?
1. 使用 java.util.Calendar
import java.sql.Timestamp;
import java.util.Calendar;
public class Main {
public static void main(String[] args) {
// 假设这是你的初始时间戳
Timestamp timestamp = Timestamp.valueOf("2024-06-05 00:00:00.0");
// 创建一个 Calendar 对象并设置为该时间戳
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(timestamp.getTime());
// 将日期减去 1 天
cal.add(Calendar.DAY_OF_MONTH, -1);
// 获取前一天的时间戳
Timestamp previousDayTimestamp = new Timestamp(cal.getTimeInMillis());
// 输出结果
System.out.println("Previous Day Timestamp: " + previousDayTimestamp);
}
}
2. 使用 java.time.LocalDateTime
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
public class Main {
public static void main(String[] args) {
// 假设这是你的初始时间戳
Timestamp timestamp = Timestamp.valueOf("2024-06-05 00:00:00.0");
// 将时间戳转换为 LocalDateTime
LocalDateTime localDateTime = timestamp.toLocalDateTime();
// 将日期减去 1 天
LocalDateTime previousDay = localDateTime.minus(1, ChronoUnit.DAYS);
// 将 LocalDateTime 转回时间戳
Timestamp previousDayTimestamp = Timestamp.valueOf(previousDay);
// 输出结果
System.out.println("Previous Day Timestamp: " + previousDayTimestamp);
}
}
如何获取两个时间戳之间的日期范围?
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
public class DateRangeExample {
/**
* 获取日期范围
* @param startTime 开始时间
* @param endTime 结束时间
* @return 日期范围
*/
private String[] getDateRange(Timestamp startTime, Timestamp endTime) {
// 将 Timestamp 转换为 LocalDateTime
LocalDateTime startDateTime = startTime.toLocalDateTime();
LocalDateTime endDateTime = endTime.toLocalDateTime();
// 获取 LocalDate 部分
LocalDate startDate = startDateTime.toLocalDate();
LocalDate endDate = endDateTime.toLocalDate();
// 创建一个 List 来存储日期字符串
List<String> dateList = new ArrayList<>();
// 使用 DateTimeFormatter 来格式化日期
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 遍历从 startDate 到 endDate 之间的每一天
LocalDate currentDate = startDate;
while (!currentDate.isAfter(endDate)) {
// 将当前日期添加到列表中
dateList.add(currentDate.format(formatter));
// 增加一天
currentDate = currentDate.plusDays(1);
}
// 将 List 转换为数组并返回
return dateList.toArray(new String[0]);
}
public static void main(String[] args) {
DateRangeExample example = new DateRangeExample();
Timestamp startTime = Timestamp.valueOf("2024-07-01 00:00:00");
Timestamp endTime = Timestamp.valueOf("2024-07-03 00:00:00");
String[] dateRange = example.getDateRange(startTime, endTime);
// 输出结果
for (String date : dateRange) {
System.out.println(date);
}
}
}
如何获取某个日期前一天的日期字符串?
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class DateUtils {
/**
* 获取前一天的日期字符串
* @param date 2024-07-05 日期字符串
* @return 前一天的日期字符串
*/
private String getPreviousDate(String date) {
// 定义日期格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 解析输入的日期字符串为 LocalDate
LocalDate currentDate = LocalDate.parse(date, formatter);
// 获取前一天的日期
LocalDate previousDate = currentDate.minusDays(1);
// 格式化前一天的日期为字符串并返回
return previousDate.format(formatter);
}
public static void main(String[] args) {
DateUtils utils = new DateUtils();
String date = "2024-07-05";
String previousDate = utils.getPreviousDate(date);
// 输出结果
System.out.println("Previous Date: " + previousDate); // 输出: 2024-07-04
}
}