首页 > 解决方案 > 使用java的Calendar.add(5,1) 多次重复日期的小时数出错!

问题描述

这是我的程序:

    public class Test {
    public static void main(String []args) {
        Calendar a = Calendar.getInstance();
        a.setTime(new Date(1949-1900,0,24,0,0,0));
        Calendar b=Calendar.getInstance();
        b.setTime(new Date(1951-1900,2,24,0,0,0));
        System.out.println(a.getTime());
        while(!a.equals(b)) {
            a.add(Calendar.DAY_OF_YEAR, 1);
            System.out.println(a.getTime());
        }
        System.out.println(a.getTime());
    }
}

输出是

Fri Nov 23 01:00:00 CST 5285
Sat Nov 24 01:00:00 CST 5285
Sun Nov 25 01:00:00 CST 5285
Mon Nov 26 01:00:00 CST 5285
Tue Nov 27 01:00:00 CST 5285

为什么小时数为 1 而不是 0?当我更改日期时,它可能会变回 0。

标签: java

解决方案


为什么您仍在使用过时的日期/时间 API?下面给出的示例不是您问题的答案,而是现代日期/时间 API 的示例。我建议您不要浪费时间尝试过时的 API 并开始使用现代日期/时间 API

import java.time.LocalDateTime;

public class Main {
    public static void main(String[] args) {
        LocalDateTime a = LocalDateTime.now();
        LocalDateTime b = LocalDateTime.now().plusHours(3);
        while (a.getHour() != b.getHour()) {
            System.out.println(a);
            a = a.plusHours(1);
        }
        System.out.println(a);
    }
}

输出:

2020-04-19T09:00:22.444642
2020-04-19T10:00:22.444642
2020-04-19T11:00:22.444642
2020-04-19T12:00:22.444642

推荐阅读