#JAVA UTC世界协调时与BJT北京时间转换

题目内容:

UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8。现在,你的程序要读入一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果分小于10分,需要保留十位上的0。如1124表示11点24分,而905表示9点5分,36表示0点36分,7表示0点7分。

有效的输入范围是0到2359,即你的程序不可能从测试服务器读到0到2359以外的输入数据。

你的程序要输出这个时间对应的UTC时间,输出的格式和输入的相同,即输出一个整数,表示UTC的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果分小于10分,需要保留十位上的0。

提醒:要小心跨日的换算。

输入格式:

一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而且分小于10分,需要保留十位上的0。

输出格式:

一个整数,表示UTC的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果小时不是0而且分小于10分,需要保留十位上的0。

输入样例:

933

输出样例:

133

import java.util.Scanner;

public class Main{

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    Scanner in = new Scanner(System.in);
    int utc;
    int bjt;
    int a;
    bjt = in.nextInt();
    if(bjt/100>8) {
        utc=bjt-800;
        System.out.println(utc);
    }
    else if(bjt>10){
        utc=(24-(8-bjt/100));
        a=bjt%100;
        System.out.println(utc+""+a);
        
    }else if(bjt<=10) {
        System.out.println((24-(8-bjt/100))+"0"+bjt%100);
    }
    }

}

上面是我的答案 ,最后上交提示 0点 和 0点1分 。我测试了一下,输入0 输出1600, 输入01,输出1601,这也没问题啊
我的问题出在哪呢?

输入800的时候,正确输出应该是0吧,你的代码输出的是240
修改后代码如下
有帮助望采纳~


import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        int utc;
        int bjt;
        int a;
        bjt = in.nextInt();
        if (bjt / 100 >= 8) {
            utc = bjt - 800;
            System.out.println(utc);
        } else if (bjt > 10) {
            utc = (24 - (8 - bjt / 100));
            a = bjt % 100;
            System.out.println(utc + "" + a);

        } else if (bjt <= 10) {
            System.out.println((24 - (8 - bjt / 100)) + "0" + bjt % 100);
        }
    }

}
import java.util.Scanner;
public class BJT2UTC {
    public static final Integer stepH = 8;// 时差
    public static final Integer stepM = 0;// 分差
    private static Integer carry = 0;// 分差如果大于60就要进位

    public static String trans2UTC(int BJT) throws Exception {
        String hour = "";
        String minute = "";
        if (BJT >= 0 && BJT <= 59) {
            hour = bjtH2utcH(0);
            minute = String.valueOf(BJT);
        } else if (BJT >= 60 && BJT <= 99) {
            hour = bjtH2utcH(BJT / 10);
            minute = "0" + bjtM2utcM(BJT % 10);
        } else if (BJT >= 100 && BJT <= 909) {
            hour = bjtH2utcH(BJT / 100);
            minute = (BJT % 100) <= 9 ? "0" + bjtM2utcM(BJT % 100) : bjtM2utcM(BJT % 100);
        } else if (BJT >= 910 && BJT <= 959) {
            hour = bjtH2utcH(BJT / 100);
            minute = bjtH2utcH(BJT % 100);
        } else if (BJT >= 1000 && BJT <= 2359) {
            hour = bjtH2utcH(BJT / 100);
            minute = (BJT % 100) <= 9 ? "0" + bjtM2utcM(BJT % 100) : bjtM2utcM(BJT % 100);
        } else {
            throw new Exception("参数不合法:" + BJT);
        }
        System.out.println(hour + ":" + minute);
        return hour + minute;
    }

    private static String bjtM2utcM(Integer minute) {
        minute -= stepM;
        if (minute < 0) {
            minute += 60;
            carry -=1;
        } else if(minute >60) {
            minute -= 60;
            carry +=1;
        }
        return minute.toString();
    }

    private static String bjtH2utcH(Integer hour) {
        hour -= stepH + carry;
        if (hour < 0) {
            hour += 24;
        } else if (hour > 23) {
            hour -= 24;
        }
        if (hour == 0) return "";
        return hour.toString();
    }

    public static void main(String args[]) throws Exception {
        Scanner sc = new Scanner(System.in);
        while (true) {
            int BJT = sc.nextInt();
            String utc = trans2UTC(BJT);
            System.out.println(utc);
        }
    }
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632