我想知道,这是如何工作的?当我将长整数作为日期传递时,该值如何转换为日期?
例如:
public Date converter(Long time){
//what the magic?
}
这个问题不是新的日期(长),我知道这个。但是我想知道在内部使用什么计算来产生(人类有意义的)日期值。
答案 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
类似的单个数字,并且仅在被要求生成日期的字符表示时执行上述转换,或者否则将其分解为数年/月/天。