题目的主要信息:

  • 纽约时间比北京时间慢12小时
  • 根据用户输入的北京时间输出相应的纽约时间
  • 若用户输入错误的月份或日期等信息则将其顺加
  • 输入以字符串的形式,年 月 日 时 分 秒用空格间隔开,如果用户数据输入不正常,应输出“您输入的数据不合理”

具体做法:

首先我们利用split函数对字符串以空格分割,用字符串数组保存,如果数组长度不为6,那就是不合理输入了,我们只处理长度为6的情况。

题目代码已经给出了日期的形式,我们将数组中的字符串依次连接成日期的格式,然后用连接好的字符串初始化一个日期类(Date),输出的时候我们用format函数就可以纠正超过限制的月份日期等做到顺加,纽约的时候我们需要减掉12个小时,一共是126060100012 * 60 * 60 * 1000毫秒,一定要精确到毫秒。

alt

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
        }
    }
}

复杂度分析:

  • 时间复杂度:O(1)O(1),年月日时分秒一共6个数字,属于常数时间
  • 空间复杂度:O(1)O(1),分割空格后保存数字的字符串数组长度属于常数