这道题的题目如下:
我写的代码如下:
package com;
import java.util.Date;
public class TestDate {
public static void main(String\[\] args) {
@SuppressWarnings("deprecation")
Date time1 = new Date(95,1,1,0,0,0);
Date time2 = new Date(95,12,31,23,59,59);
System.out.println("1995年的第一天" + time1);
System.out.println("1995年的第最后一天" + time2);
System.out.println(time1.getTime());
System.out.println(time2.getTime());
System.out.println("-----------------------------------");
long a1 = time1.getTime();
long a2 = time2.getTime();
long difference = a2 - a1;
long number = (long) (Math.random() \* difference);
long newNumber = number + a1;
Date time3 = new Date(newNumber);
System.out.println(time3);
}
}
运行结果:
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco}
1995年的第一天Wed Feb 01 00:00:00 CST 1995
1995年的第最后一天Wed Jan 31 23:59:59 CST 1996
791568000000
823103999000
\-----------------------------------
Sun Aug 06 12:41:31 CST 1995
这里我有疑问的是代码中的这一行:Date time2 = new Date(95,12,31,23,59,59);
我明明输入的是95年的12月31日,为什么系统识别出来却是
这样一个结果?
我自己找到答案了,应该是下面这样写:
原来的错误在两个地方:
第一,Date构造函数的月份是从0开始的,而不是从1开始,所以我需要1月的时候,输入1这个数字,出来的是2月。
第二,在计算1995年最后一个时刻,不应该是1995年12月31日23时59分59秒,而应该是1996年0点-减去1毫秒,这样才精准。