24小时至12小时转换器

时间:2018-02-22 20:01:17

标签: java clock

我看到很多刚接触Java的人要求这个,但不是我的方式。我看到了很多关于如何进行这种转换的好信息,我喜欢很多想法,但没有一个直接代表我遇到的问题。

我要求用户提供三个表示当前时间的Ints,问题是,当他们每小时输入00时,它会重复一个双零而不是12.我无法弄清楚如何告诉它。我会使用if(小时== 00)小时= 12

我该如何正确地说出来?另外,我需要在09:15:15 AM以1比9的时间在前面说0小时 而不是上午9:15:15我的导师说使用打印F但这将破坏我当前的代码。这是错误的做法吗?

非常感谢帮助。

这是我到目前为止的代码。

import java.util.Scanner;

public class ps5 {

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Enter a time value in the following format: HH MM SS");
        int hour = keyboard.nextInt();
        int minute = keyboard.nextInt();
        int second = keyboard.nextInt();
        int trueHour = hour.

  if (hour < 23 && hour >= 0)
       if (hour > 11)
        {
            if (hour == 12) hour = 24;
            System.out.printf("%02d:%02d:%02dPM\n", (hour - 12), minute, second);
        }
        else
        {
            if (hour == 00) hour = 12;
            System.out.printf("%02d:%02d:%02dAM\n", hour , minute, second);
        }
    else
            System.out.print("Hour must be between 0 and 23 inclusive.");

    }
}

2 个答案:

答案 0 :(得分:1)

为什么不使用java time api而不是自己做所有的转换呢?

这会使用java.time.LocalTimejava.time.format.DateTimeFormatter进行转换,并且应该能够替换if语句中的所有内容。您仍然需要进行自己的输入验证。

LocalTime time = LocalTime.of(hour,minute,second);
System.out.println(time.format(DateTimeFormatter.ofPattern("hh:mm:ss a")));

由于我不在工作,我遗憾地无法验证这是否有效,但这应该是一个不错的起点。

答案 1 :(得分:0)

你非常接近:

String ampm = "AM";
// You check hour but not minute or second
if (second >= 0 && second < 60 && minute >= 0 && minute < 60 && hour <= 23 && hour >= 0) {
    // Check PM
    if (hour >= 12) {
        // Only subtract when hour != 12
        if (hour > 12) {
            hour -= 12;
        }
        ampm = "PM";
    }
    else if (hour == 0) {
        hour = 12;
    }
    // Instructor says use printf...
    System.out.printf("%d:%02d:%02d %s", hour, minute, second, ampm);
}
else {
    // Print an error....
}