繁体   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