如何将日期值表示为长整数转换为有意义的日期?

时间:2014-08-28 18:48:20

标签: java

我想知道,这是如何工作的?当我将整数作为日期传递时,该值如何转换为日期

例如:

    public Date converter(Long time){
     //what the magic?
    }

这个问题不是新的日期(长),我知道这个。但是我想知道在内部使用什么计算来产生(人类有意义的)日期值。

1 个答案:

答案 0 :(得分:4)

粗略地说:

int days = longTimeInSeconds / (60 * 60 * 24);
int timeOfDay = longTimeInSeconds % (60 * 60 * 24);  // Leave converting this to hours/mins/secs to the student
int fourYearIntervals = days / (365 * 4 + 1);
int daysInInterval = days % (365 * 4 + 1);
int yearInInterval = daysInInterval / 365;
int daysInYear = daysInInterval % 365;  // For the student to convert to months/days
int year = fourYearIntervals * 4 + yearInInterval;

我认为需要额外的软糖来解释1970年不是4年间隔的边界,但上述情况应该非常接近。

关键是要了解每四年是闰年,所以这些年是4年间隔。 (规则说每100年不是闰年,这意味着2000年不会是一年,但是进一步规则说每400年就是闰年,所以我们在1901年到2099年之间“安全”。感谢您不会看到由于“Y2.1K错误”而发生的灾难。)

但请记住,许多Time对象类在内部将时间存储为与上面的原始long类似的单个数字,并且仅在被要求生成日期的字符表示时执行上述转换,或者否则将其分解为数年/月/天。