我有一个整数,显示自1970年1月1日以来的天数,例如1969-12-31 = -1,1970-01-01 = 0,1970-01-02 = 1,依此类推。我想知道一个算法,它将采用这一天的数字并告诉我哪一天是这一天。因此,例如1970年的0到364天,1971年的365到729天,依此类推。请记住,算法必须接受正数和负数;然而,它不需要处理Julian到Gregorian日历的转换(即我们可以假设当前的公历系统在时间上连续向后延伸)。
答案 0 :(得分:0)
我找到了问题的答案。这是一些有效的Java代码。
public int yearFromDays(int days) {
double d0 = days + 719162;
double n400 = Math.floor(d0/146097.0);
double d1 = d0 % 146097;
double n100 = Math.floor(d1/36524.0);
double d2 = d1 % 36524;
double n4 = Math.floor(d2/1461.0);
double d3 = d2 % 1461;
double n1 = Math.floor(d3/365.0);
double year = 400*n400 + 100*n100 + 4*n4 + n1;
if (n100 != 4 && n1 != 4) year++;
return (int)year;
}
答案 1 :(得分:0)
以下是使用Java API执行此操作的方法:
public int yearFromDays(int days) {
Calendar c = Calendar.getInstance();
c.setTime(new Date(0));
c.add(Calendar.DATE, days);
return c.get(Calendar.YEAR);
}