今天写两个指定范围内的随机日期时 想通过gettime取到一天的毫秒数然后限定范围
总是取不到完整的30天的毫秒数只能取到20天的
代码如下
public class TT {
public static void main(String[] args) throws Exception {
SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");
Date pp = sd.parse("1970-01-02");
long time = pp.getTime();
System.out.println(new Date(time));
for (int i = 1; i < 30; i++) {
System.out.println(sd.format(new Date((long) (time*i))));
}
}
}
取到的值如下
1970-01-02
1970-01-02
1970-01-03
1970-01-04
1970-01-04
1970-01-05
1970-01-06
1970-01-06
1970-01-07
1970-01-08
1970-01-08
1970-01-09
1970-01-10
1970-01-10
1970-01-11
1970-01-12
1970-01-12
1970-01-13
1970-01-14
1970-01-14
1970-01-15
1970-01-16
1970-01-16
1970-01-17
1970-01-18
1970-01-18
1970-01-19
1970-01-20
1970-01-20
查到的值少了2/3 本来以为是使用方法的问题去查了api和好多资料
在看度娘的时候突然看到了时区两个字突然想到了这里是东8区 gettime初始时间是从 1970-01-01 08-00-00开始计算的
测试代码如下
public class TT {
public static void main(String[] args) throws Exception {
SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
Date pp = sd.parse("1970-01-01 01-00-00");
long time = pp.getTime();
for (int i = 1; i < 30; i++) {
System.out.println(sd.format(new Date((long) (time*i))));
}
}
}
结果如下
1970-01-01 01-00-00
1969-12-31 18-00-00
1969-12-31 11-00-00
1969-12-31 04-00-00
1969-12-30 21-00-00
1969-12-30 14-00-00
1969-12-30 07-00-00
1969-12-30 00-00-00
1969-12-29 17-00-00
1969-12-29 10-00-00
1969-12-29 03-00-00
1969-12-28 20-00-00
1969-12-28 13-00-00
1969-12-28 06-00-00
1969-12-27 23-00-00
1969-12-27 16-00-00
1969-12-27 09-00-00
1969-12-27 02-00-00
1969-12-26 19-00-00
1969-12-26 12-00-00
1969-12-26 05-00-00
1969-12-25 22-00-00
1969-12-25 15-00-00
1969-12-25 08-00-00
1969-12-25 01-00-00
1969-12-24 18-00-00
1969-12-24 11-00-00
1969-12-24 04-00-00
1969-12-23 21-00-00
取到的时间一直在后退证明了猜想然后就开始写需求
public class T8 {
public static String t8(String d,int i) throws Exception {
SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
SimpleDateFormat sd2=new SimpleDateFormat("yyyy-MM-dd");
Date p = sd2.parse(d);
Date pp = sd.parse("1970-01-02 08-00-00");
long t2 = p.getTime();
//一天的毫秒数
long t = pp.getTime();
//三十天的毫秒数
long endtime=t*i;
double random = Math.random();
//random(),
long r =(long)(random*(endtime+1))+t2;
Date date = new Date(r);
String format = sd2.format(date);
return format;
}
public static void main(String[] args) throws Exception {
for (int i = 0; i < 30; i++) {
String t8 = T8.t8("2012-10-20", 30);
System.out.println(t8);
}
}
}
运行结果
2012-11-17
2012-10-22
2012-11-14
2012-10-20
2012-11-14
2012-11-13
2012-11-03
2012-11-10
2012-11-10
2012-11-10
2012-11-04
2012-11-03
2012-10-31
2012-11-10
2012-11-17
2012-11-08
2012-10-28
2012-11-07
2012-11-03
2012-11-01
2012-11-04
2012-11-11
2012-10-26
2012-11-03
2012-10-31
2012-11-03
2012-11-15
2012-11-14
2012-10-31
2012-10-26
运行数据正常能取到所有范围内的值