NutzCN Logo
问答 Times D1970 BUG
发布于 1728天前 作者 wx_52s4j14q2lq5edn8urjl 1274 次浏览 复制 上一个帖子 下一个帖子
标签:

org.nutz.lang.Times
public static int D1970(int yy, int MM, int dd)
存在计算BUG,如果是闰年的29号,会多计算一天,建议删掉:
// 如果是闰年且本月是 2 月
if (isLeapYear && dd == 29) {
day++;
}

2 回复
public static int D1970(int yy, int MM, int dd) {
        // 转换成相对公元元年的年份
        // 如果给的年份小于 100,那么就认为是从 1970 开始算的年份
        int year = (yy < 100 ? yy + 1970 : yy);
        // 得到今年之前的基本天数
        int day = (year - 1970) * 365;
        // 补上闰年天数
        day += countLeapYear(year) - countLeapYear(1970);
        // 计算今年本月之前的月份
        int mi = Math.min(MM - 1, 11);
        boolean isLeapYear = leapYear(yy);
        for (int i = 0; i < mi; i++) {
            day += _MDs[i];
        }
        // 考虑今年是闰年的情况
        if (isLeapYear && MM > 2) {
            day++;
        }
        // 最后加上天数
        day += Math.min(dd, _MDs[mi]) - 1;

        // 如果是闰年且本月是 2 月
        if (isLeapYear && dd == 29) {
            day++;
        }

        // 如果是闰年并且过了二月
        return day;
    }

来个pr可以吗?

添加回复
请先登陆
回到顶部