Java学习-日期

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()+" 开始"+"\n到 "+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]) + "\t");
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]) + "\t");
87             }
88         }
89     }
90 }

运行结果:

 

 可以日期是按照“当天”的时间由小到大排序,不管日期的大小。

posted @ 2020-01-06 15:39  细雨轻风  阅读(233)  评论(0编辑  收藏  举报