/*
- 准备一个长度是9的日期数组
使用1970年-2000年之间的随机日期初始化该数组
按照这些日期的时间进行升序排序
比如 1988-1-21 12:33:22 就会排在 1978-4-21 19:07:23 前面,因为它的时间更小,虽然日期更大
*/
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDate3 {
public static String toString(Date d) {
return toString(d, "yyyy-MM-dd HH:mm:ss");
}
public static String toString(Date d, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(d);
}
private static Date getRandomDate(int yearStart,int yearEnd){
SimpleDateFormat sdf =new SimpleDateFormat("yyyy");
try{
Date dstart = sdf.parse(String.valueOf(yearStart));//1970
Date dend = sdf.parse(String.valueOf(yearEnd+1));//2001不是2000,要在2001的基础上减少1毫秒,才表示2000年的最后一刻
long timeStart = dstart.getTime();
long timeEnd = dend.getTime()-1;
long timeRandom = (long)(timeStart+Math.random()*(timeEnd-timeStart));
return new Date(timeRandom);
}catch(ParseException e){
e.printStackTrace();
}
return null;
}
//主函数
public static void main(String[] args) {
int yearStart = 1970;//起始年份
int yearEnd = 2000;//结束年份
Date []ds = new Date[9];//新建长度为9的数组,每一个位置为一个日期(年月日+时分秒)
for(int i=0;i<ds.length;i++){//遍历数组,并调用getRandom函数为每一个位置进行赋值,即可得到随即日期数组
ds[i]=getRandomDate(yearStart,yearEnd);
}
System.out.println("得到的随机日期数组是:");//遍历数组并输出随即日期
for(int i=0;i<ds.length;i++){
System.out.printf(toString(ds[i])+"\t");//调用toString方法,返回toString(Date d, String format)方法的结果
if(i%3==2){
System.out.println();
}
}
//选择法排序,将时间按照升序排序
for(int i = 0;i<ds.length-1;i++){
for(int j =i+1;j<ds.length;j++){
String str1 = toString(ds[i],"HHmmss");//调用toString方法,将时间转化为字符串
String str2 = toString(ds[j],"HHmmss");
int date1 = Integer.parseInt(str1);//将字符串转化为整型
int date2 = Integer.parseInt(str2);
// System.out.println(date1);//这里输出的整型数值,如:时间为08:16:04,整型数值就为:081604,然后再进行大小比较
if(date2<date1){比较转化成整型的时刻的值大小
Date temp = ds[i];
ds[i]=ds[j];
ds[j]=temp;
}
}
}
System.out.println("随机排序后的随机日期数组:");//输出
for(int i=0;i<ds.length;i++){
System.out.printf(toString(ds[i])+"\t");//调用toString方法
if(i%3==2){
System.out.println();
}
}
}
}