• 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()+" 开始"+"
    到 "+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 }

    运行结果:

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

  • 相关阅读:
    总结下JavaWeb应用里正确显示中文需要的设置
    JDBC连接MySQL数据库的示例代码
    ZT:CSS实现水平|垂直居中漫谈
    今天整理了下所有博文
    关于后台数据库正常存储中文通过Ajax方式传递到前台变成问号的处理
    回顾以前的线程安全的类
    同步解决线程安全问题的三种实现
    如何判断一个程序是否会有线程安全问题?
    Java中如何通过一个类名来调用另一个类的静态方法?
    作为一个程序员,数学对你到底有多重要?!
  • 原文地址:https://www.cnblogs.com/gilgamesh-hjb/p/12156637.html
Copyright © 2020-2023  润新知