簡體   English   中英

如何從一年中的日期向下迭代到上一年的日期?

[英]How to iterate downward from a Date in one year to a Date in a previous year?

我有一個開始日期,假設是 2020-12-30 08:00:00,我有一個結束日期,假設是 2021-02-11 16:00:00。

我需要通過以下方式獲取這些天之間的時間:

long diffInHours = TimeUnit.HOURS.convert(Math.abs(closeStoreDateTime.getTime() - openStoreDateTime.getTime()), TimeUnit.MILLISECONDS);

我的問題是,當我從結束日期向下迭代到開始日期時,我將當前時間和開始時間之間的小時差轉換為准確的時間,以便稍后存儲在 map 中。 像這樣:

        int latestHour = (int) diffInHours;
        while (latestHour >= openStoreDateTime.toInstant().atZone(ZoneId.systemDefault()).getHour()) {
            Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(ZoneId.systemDefault()));
            String hourConversion;
            if (closeStoreDateTime.toInstant().atZone(ZoneId.systemDefault()).getDayOfYear() > openStoreDateTime.toInstant().atZone(ZoneId.systemDefault()).getDayOfYear()) {
                if (latestHour > 24) {
                    calendar.add(Calendar.HOUR_OF_DAY, latestHour);
                    hourConversion = calendar.get(Calendar.AM_PM) == Calendar.AM ? String.valueOf(calendar.get(Calendar.HOUR)) : String.valueOf(calendar.get(Calendar.HOUR) + 12);
                } else {
                    calendar.add(Calendar.HOUR_OF_DAY, latestHour);
                    int AM_PM = calendar.get(Calendar.AM_PM);
                    if (AM_PM == Calendar.AM || (AM_PM == Calendar.PM && calendar.get(Calendar.HOUR) == 12)) {
                        hourConversion = String.valueOf(calendar.get(Calendar.HOUR));
                    } else {
                        hourConversion = String.valueOf(calendar.get(Calendar.HOUR) + 12);
                    }
                }
            } else {
                hourConversion = String.valueOf(latestHour);
            }

如果日期在同一年內,則此方法有效,但如果它們在不同年份,則無效,因為開始年份 (363) 中的日期大於結束年份中的日期。 有誰知道如何將 2 個不同日期之間的小時數轉換為可用日期? 謝謝你。

如果我正確理解您的問題,您需要從結束日期時間到開始日期時間的日期時間值List ,每小時一個。

以下是一些測試結果。

2021-02-11T16:00
2021-02-11T15:00
2021-02-11T14:00
2021-02-11T13:00
2021-02-11T12:00
...
2020-12-30T12:00
2020-12-30T11:00
2020-12-30T10:00
2020-12-30T09:00
2020-12-30T08:00

這是使用LocalDateTime class 的可運行代碼。 您可以使用DateTimeFormatter以任何方式顯示LocalDateTime值。

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

public class DateIntervals {

    public static void main(String[] args) {
        String endDateString = "2021-02-11 16:00:00";
        String startDateString = "2020-12-30 08:00:00";
        
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
                "yyyy-MM-dd HH:mm:ss");
        LocalDateTime endDate = LocalDateTime.parse(endDateString, formatter);
        LocalDateTime startDate = LocalDateTime.parse(startDateString, formatter);
        
        List<LocalDateTime> intervals = new ArrayList<>();
        LocalDateTime date = endDate;
        while (date.isAfter(startDate)) {
            intervals.add(date);
            date = date.minusHours(1L);
        }
        intervals.add(date);
        
        for (int i = 0; i < intervals.size(); i++) {
            System.out.println(intervals.get(i));
        }
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM