1.借助随机数,创建一个从1995.1.1 00:00:00 到 1995.12.31 23:59:59 之间的随机日期
运用知识点:字符串与Date对象的互相转换,随机数的运用,Date对象的格式化输出。
1 package date;
2
3 import java.util.Date;
4 import java.text.ParseException;//字符串转Date对象
5 import java.text.SimpleDateFormat;//日期格式
6
7 public class TestDate {
8 public static void main(String[] args) {
9 Date d1 = new Date();
10 Date d2 = new Date();
11 SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");//创建sdf这一个日期格式
12 String str1="1995.1.1 00:00:00";
13 String str2="1995.12.31 23:59:59";
14 try {
15 d1=sdf.parse(str1);//字符串转Date对象
16 } catch (ParseException e1) {
17 // TODO Auto-generated catch block
18 e1.printStackTrace();
19 }
20 try {
21 d2=sdf.parse(str2);//字符串转Date对象
22 } catch (ParseException e) {
23 // TODO Auto-generated catch block
24 e.printStackTrace();
25 }
26 System.out.println("从 "+d1.toString()+" 开始"+"
到 "+d2.toString()+" 为止");
27 System.out.print("相差多少毫秒:");
28 System.out.println(d2.getTime()-d1.getTime());
29
30 long x1=d2.getTime()-d1.getTime();//getTime()得到的是long类型
31 long x2=Math.round(Math.random()*(d2.getTime()-d1.getTime()));
32
33 System.out.print("取其中的随机一个:");
34 System.out.println(x2);
35
36 Date d=new Date(x2+d1.getTime());//加上开始时间d1本身的时间
37 String str=sdf.format(d);//Date对象转字符串
38 System.out.println("随机生成的日期是:"+str);
39 System.out.println("把整段时间看成'1',随机生成的日期在这段时间的位置:"+String.format("%.2f", (double)x2/x1));
40
41
42 }
43 }
结果演示:
2. 准备一个长度是9的日期数组
使用1970年-2000年之间的随机日期初始化该数组
按照这些日期的时间进行升序排序
比如 1988-1-21 12:33:22 就会排在 1978-4-21 19:07:23 前面,因为它的(当天)时间更小,虽然日期更大
涉及知识点:字符串和Date类互相转换,随机数,Date格式化,排序算法
1 package date;
2
3 import java.util.Date;
4 import java.text.ParseException;//字符串转Date对象
5 import java.text.SimpleDateFormat;//日期格式
6
7 public class TestDate {
8 public static void main(String[] args) {
9 Date d[] = new Date[9];
10 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 创建sdf这一个日期格式
11 Date d1 = new Date(0);// 1970
12 Date d2 = new Date();
13 String str = "2000-1-1 0:0:0";
14 try {
15 d2 = sdf.parse(str);
16 } catch (ParseException e) {
17 // TODO Auto-generated catch block
18 e.printStackTrace();
19 }
20 System.out.println("得到的随机数组:");
21 for (int i = 0; i < d.length; i++) {
22 // 生成数组
23 long x = Math.round(Math.random() * (d2.getTime() - d1.getTime()));
24 d[i] = new Date(x);
25 // 打印数组
26 if ((i + 1) % 3 == 0) {
27 System.out.println(sdf.format(d[i]));
28 } else {
29 System.out.print(sdf.format(d[i]) + " ");
30 }
31 }
32 System.out.println("排序后的随机数组:");
33 long aDaysTime = 24 * 60 * 60 * 1000;
34 int keys[] = new int[9];// 为了排序需要,构造辅助数组keys[]
35 for (int i = 0; i < 9; i++) {
36 // 因为时间原点是1970年1月1日 8点0分0秒,所以为了得到准确的当天所经过的时间要加上8个小时
37 keys[i] = (int) ((d[i].getTime() + 8 * 60 * 60 * 1000) % aDaysTime);
38 }
39 // 对Date数组进行排序,这里用的简单选择排序,
40 {
41 for (int i = 0; i < 9; i++) {
42 int min = i;
43 for (int j = i + 1; j < 9; j++) {
44 if (keys[min] > keys[j])
45 min = j;
46 }
47 int tmp = keys[i];
48 keys[i] = keys[min];
49 keys[min] = tmp;
50 // 对Date数组排序
51 Date dTmp = d[i];
52 d[i] = d[min];
53 d[min] = dTmp;
54 }
55 }
56
57 // 顺便复习一下排序方法
58 // 冒泡排序
59 // {
60 // int i, j, tmp, flag;
61 // for (i = 0; i < 9; i++) {
62 // flag = 0;
63 // for (j = 9 - 1; j > i; j--) {
64 // if (keys[j - 1] > keys[j]) {
65 // // 两两交换,链式推进
66 // tmp = keys[j];
67 // keys[j] = keys[j - 1];
68 // keys[j - 1] = tmp;
69 // flag = 1;// 说明已经交换了
70 // // 利用辅助数组keys[]对Date类数组排序
71 // Date dTmp = d[j];
72 // d[j] = d[j - 1];
73 // d[j - 1] = dTmp;
74 // }
75 // }
76 // if (flag == 0)//从后往前扫描一轮后竟然没有发生交换,那此时该数组本身就是有序的了
77 // break;
78 // }
79 // }
80
81 // 打印数组
82 for (int i = 0; i < d.length; i++) {
83 if ((i + 1) % 3 == 0) {
84 System.out.println(sdf.format(d[i]));
85 } else {
86 System.out.print(sdf.format(d[i]) + " ");
87 }
88 }
89 }
90 }
运行结果:
可以日期是按照“当天”的时间由小到大排序,不管日期的大小。