题目的主要信息:
- 纽约时间比北京时间慢12小时
- 根据用户输入的北京时间输出相应的纽约时间
- 若用户输入错误的月份或日期等信息则将其顺加
- 输入以字符串的形式,年 月 日 时 分 秒用空格间隔开,如果用户数据输入不正常,应输出“您输入的数据不合理”
具体做法:
首先我们利用split函数对字符串以空格分割,用字符串数组保存,如果数组长度不为6,那就是不合理输入了,我们只处理长度为6的情况。
题目代码已经给出了日期的形式,我们将数组中的字符串依次连接成日期的格式,然后用连接好的字符串初始化一个日期类(Date),输出的时候我们用format函数就可以纠正超过限制的月份日期等做到顺加,纽约的时候我们需要减掉12个小时,一共是毫秒,一定要精确到毫秒。
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();
String[] arr = str1.split(" "); //依据空格分开
if(arr.length != 6) //不足6项,不合理的输入
System.out.println("您输入的数据不合理");
else{
//将字符串组合成日期格式
String temp = arr[0] + "-" + arr[1] + "-" + arr[2] + " " + arr[3] + ":" + arr[4] + ":" + arr[5];
Date date = sdf.parse(temp); //将字符串转换成日期
System.out.println("北京时间为:" + sdf.format(date.getTime())); //格式化后输出
System.out.println("纽约时间为:" + sdf.format(date.getTime() - (long) 12 * 60 * 60 * 1000)); //减去12h
}
}
}
复杂度分析:
- 时间复杂度:,年月日时分秒一共6个数字,属于常数时间
- 空间复杂度:,分割空格后保存数字的字符串数组长度属于常数