题解 | 日期换算

日期换算

https://www.nowcoder.com/practice/08f8a66cb5584268a78ecca2749a2da5

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Scanner in = new Scanner(System.in);
        String str1 = in.nextLine();

        //write your code here......
        
        
        String [] strArr = str1.split(" ");

        if(strArr.length != 6){
            System.out.println("您输入的数据不合理");
        } else{
            int [] beijingArr = getTimeArr(strArr);
            String beijingTime = getTimeByArr(beijingArr);
            System.out.println("北京时间为:"+ beijingTime);

            String newYorkTime = getNewYorkTimeByBeijingTime(beijingArr);
            System.out.println("纽约时间为:" + newYorkTime);
        }

    }

    public static String getBeijingTime(int [] timeArr){
        if(timeArr.length != 6){
            System.out.println("您输入的数据不合理");
            return null;
        }
        return arrTimeToString(timeArr);
    }

    public static String getNewYorkTimeByBeijingTime(int [] timeArr){
        if(timeArr.length != 6){
            System.out.println("您输入的数据不合理");
            return null;
        }
        timeArr[3] -= 12;
        timeArr = getTimeArr(timeArr);
        return getTimeByArr(timeArr);
    }

    public static String getTimeByArr(int [] arr){
        if(arr.length != 6){
            return "";
        }
        String [] format = {"-","-"," ",":",":"};
        String str = "" + arr[0];
        for(int i = 1; i < arr.length; i++){
            str = str + format[i - 1] + String.format("%02d", arr[i]);
        }
        return str;
    }

    public static String arrTimeToString(int [] arr){
        String str = "";
        for(int i = 0; i < arr.length; i++){
            str = str + arr[i] + " ";
        }
        return str;
    }

    public static int [] getTimeArr(String []strArr){
        int year = Integer.valueOf(strArr[0]);
        int month = Integer.valueOf(strArr[1]);
        int day = Integer.valueOf(strArr[2]);
        int hour = Integer.valueOf(strArr[3]);
        int minute = Integer.valueOf(strArr[4]);
        int second = Integer.valueOf(strArr[5]);

        if(second > 60){
            minute += second/60;
            second %= 60;
        }
        if(minute > 60){
            hour += minute/60;
            minute %= 60;
        }
        if(hour > 24){
            day += hour/24;
            hour %= 24;
        }
        if(hour < 0){
            hour += 24;
            day --;
            if(day <= 0){
                if(month > 1){
                    int lastMonthDays = getDays(year, month - 1);
                    day += lastMonthDays;
                    month -= 1;
                }else{
                    day += 31;
                    month += 12;
                    year --;
                }
            }
        }
        while(day > getDays(year, month)){
            day -= getDays(year, month);
            month += 1;
            if(month > 12){
                year += month/12;
                month %= 12;
            }
        }
        if(month > 12){
            year += month/12;
            month %= 12;
        }

        int [] arr = new int [6];
        arr[0] = year;
        arr[1] = month;
        arr[2] = day;
        arr[3] = hour;
        arr[4] = minute;
        arr[5] = second;
        return arr;
    }

    public static int [] getTimeArr(int [] arr){
        String [] strArr = new String [arr.length];
        for(int i = 0; i < arr.length; i++){
            strArr[i] = "" + arr[i];
        }
        return getTimeArr(strArr);
    }

    public static int getDays(int year, int month){
        int addDay = 0;
        if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)){
            addDay ++;
        }
        int nums = 0;
        switch(month){
            case 1 : {nums = 31; break;}
            case 2 : {nums = 28 + addDay; break;}
            case 3 : {nums = 31; break;}
            case 4 : {nums = 30; break;}
            case 5 : {nums = 31; break;}
            case 6 : {nums = 30; break;}
            case 7 : {nums = 31; break;}
            case 8 : {nums = 31; break;}
            case 9 : {nums = 30; break;}
            case 10 : {nums = 31; break;}
            case 11 : {nums = 30; break;}
            case 12 : {nums = 31; break;}
        }
        return nums;
    }
}

全部评论

相关推荐

牛客30771517...:SQL注入这一块
点赞 评论 收藏
分享
08-08 16:33
唐山学院 Java
职场水母:首先,简历太长,对于实习和应届找工作,hr一眼扫的是学历,技术看实习,你写的技术栈字太多了,尽量用一句话概括不用写那么详细,技术面的时候会问的,而且技术栈都会在实习或者项目里体现,你要做的是,把你的简历浓缩为一页,删除没用的东西,比如实践经历,自我评价,这些纯废话,没用,专业技能写的太离谱,你真的熟练掌握了吗,建议都写熟悉,找工作和写论文不一样,追求的是干练和实用,把实习经历和项目提前,把掌握的技术栈写到最后,然后去找实习,
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务