java 中时间戳相关的类与方法

13 阅读2分钟

下面以实际的问题为例,去了解 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
    }
}