java初始化日期和日期(毫秒)构造函数
日期类的JavaDoc声明
public Date(long date)
Allocates a Date object and initializes it to represent the specified number of
milliseconds since the standard base time known as "the epoch", namely January 1, 1970,
00:00:00 GMT.
下面的代码通过使用Date(long millises)构造函数计算毫秒数来计算1月24日和1月25日的日期
public static void main(String[] args) throws java.text.ParseException {
long milliSecFor25 = (24*60*60*24*1000);
long milliSecFor26 = (25*60*60*24*1000);
Date dateJan25 = new Date(milliSecFor25);
Date dateJan26 = new Date(milliSecFor26);
System.out.println("Date for Jan 25:" + dateJan25);
System.out.println("Date for Jan 26:" + dateJan26);
}
在执行下面的代码时,我得到下面的输出
Date for Jan 25: Sun Jan 25 05:30:00 IST 1970
Date for Jan 26: Sun Dec 07 12:27:12 IST 1969
这是不正确的。有人能解释一下为什么我找不到1月25日的正确日期吗
# 1 楼答案
你有一个整数溢出。使用long而不是int:
# 2 楼答案
问题在于:
所有这些都是在整数算术中执行的,并且该值溢出
您可以看到,如果改为使用
long
值执行算术,并显示与Integer.MAX_VALUE
比较的结果:印刷品:
因此,您的
int
算法实际上溢出到了一个负值,这就是为什么您在Unix纪元之前看到了一个Date
值旁白:
TimeUnit.DAYS.toMillis(26)
作为更干净的计算方法Calendar
从年/月/日获取适当的Date
Date
/Calendar
更好的库java.time
包中)李>