【问题标题】:Get year from day number counter从天数计数器获取年份
【发布时间】:2011-02-22 05:04:31
【问题描述】:

我有一个整数表示自 1970 年 1 月 1 日以来的天数,例如 1969-12-31=-1、1970-01-01=0、1970-01-02=1 等等.我想知道一种算法,它将采用这一天数并告诉我这一天是哪一年。例如,0 到 364 天位于 1970 年,365 到 729 天位于 1971 年,依此类推。请记住,算法必须同时接受正数和负数;但是,它不需要处理儒略历到公历的转换(即我们可以假设当前的公历系统在时间上连续向后延伸)。

【问题讨论】:

  • @sasfrog - 我最终需要在 Java 中执行此操作,但任何语言的答案都是可以接受的,因为我应该能够使逻辑适应 Java。

标签: date


【解决方案1】:

我找到了我的问题的答案。下面是一些有效的 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;
}

【讨论】:

  • 我建议不要在这里使用双打。因为你产生的每个中间值都是一个整数,你可以简单地使用一个 int,如果你担心溢出,你可以使用一个 long。请记住,整数除法会自动向下舍入。
【解决方案2】:

这是使用 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);
}

【讨论】:

    猜你喜欢
    • 2013-06-23
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2011-06-20
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多