题解 | 日期换算
日期换算
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; } }