蓝桥杯Date日期排列

蓝桥杯结束了,混了个省赛二等奖23333,原本都已经不抱希望了。
第一道大的编程题有点不甘心,差点就完成了

输入:02-05-21

输出三种可能的年月日,并从小到大排序:
年-月-日 2002-05-21
月-日-年 2021-02-05
日-月-年 2021-05-02
(限定日期范围1951-01-01到2050-12-31)

import java.sql.Date;
import java.util.Scanner;

public class Datemore {

    //两个边界日期
    static Date start = Date.valueOf("1951-01-01");
    static Date end = Date.valueOf("2050-12-31");

    public static void main(String[] args) {


        //可能的三个日期
        Date a,b,c;

        //测试
        //a = Date.valueOf("2003-02-29");
        //System.out.println(a.toString());           
        //2003-02-29是不存在的日期,如果toString()输出,就转变成了2003-03-01
        //System.out.println();

        Scanner sc = new Scanner(System.in);
        String getin = sc.nextLine();
        sc.close();

        //按“-”划分成三段
        String[] temp = getin.split("-");
        //三种可能的排列
        String aa,bb,cc;

        //格式化成正常的年份
        if(Integer.parseInt(temp[0])>=51){
            aa = "19"+temp[0]+"-"+temp[1]+"-"+temp[2];
        }else{
            aa = "20"+temp[0]+"-"+temp[1]+"-"+temp[2];  
        }
        if(Integer.parseInt(temp[1])>=51){
            bb = "19"+temp[2]+"-"+temp[0]+"-"+temp[1];
        }else{
            bb = "20"+temp[2]+"-"+temp[0]+"-"+temp[1];  
        }
        if(Integer.parseInt(temp[2])>=51){
            cc = "19"+temp[2]+"-"+temp[1]+"-"+temp[0];
        }else{
            cc = "20"+temp[2]+"-"+temp[1]+"-"+temp[0];  
        }


        try{
            a = Date.valueOf(aa);   //获取输入,以三种可能的顺序用valueOf格式输入到 a,b,c
        }catch (java.lang.IllegalArgumentException e) { 
            //如果是不合法的输入,就置为flag 2333-03-03  
            //这里可以写到外部函数里去(重复代码)
            a = Date.valueOf("2333-03-03");
        }
        try{
            b = Date.valueOf(bb);
        }catch (java.lang.IllegalArgumentException e) {
            b = Date.valueOf("2333-03-03");
        }
        try{
            c = Date.valueOf(cc);
        }catch (java.lang.IllegalArgumentException e) {
            c = Date.valueOf("2333-03-03");
        }

        //检查日期
        a = check(a,aa);
        b = check(b,bb);
        c = check(c,cc);

        //输入到一个数组,从小到大排序(选排)
        Date[] line = {a,b,c};
        Date temp2 = a;
        int min = 0;
        for(int i = 0;i<3;i++){
            temp2 = line[i];
            for(int j = i;j<3;j++){
                if(line[j].compareTo(temp2)<0){   
                //compareTo(date)如果参数 date 等于此 Date,则返回值 0;如果此 Date 在 date 参数之前,则返回小于 0 的值;如果此 Date 在 date 参数之后,则返回大于 0 的值。
                    min = j;
                    temp2 = line[j];
                    line[min] = line[i];
                    line[i] = temp2;
                }
            }
        }
        //输出
        for (int i = 0;i<3;i++) {
            if(!line[i].toString().equals("2333-03-03")){
                System.out.println(line[i].toString());
            }
        }

    }

    //check()函数
    private static Date check(Date t, String tt) {

        //如果日期不存在或不在范围内,置空(其实不好置空,干脆置一个特殊值)
        if(!t.toString().equals(tt)||!t.after(start)||!t.before(end)){
            t = Date.valueOf("2333-03-03");
        }
        return t;
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值