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

