将 4 位军用时间转换为标准 12 小时时间格式

2022-01-12 00:00:00 datetime time formatting java

我想做的事:

我正在尝试将 4 位军用时间转换为标准的 12 小时时间格式,使用冒号和添加的 PM 或 AM,而不使用在我的代码之前导入任何内容(我正在制作一种需要Java 101 技术).

I'm trying to convert a 4-digit military time into the standard 12 hour time format, with a colon and an added PM or AM without the use of importing anything before my code (I'm making a method that requires nothing other than java 101 techniques).

我的情况:

我有 milTime,我现在每次运行它时都会手动更改它(如顶部声明的,当前为 1100),直到我将其转换为方法并提交分配,其中它将接受 milTime,并将返回 milTimeString 供主程序打印.我目前正在使用 BlueJ 作为 IDE,(我不确定这是否是最好的?)

I have milTime, which I manually change around for now every time I run it(as declared up top, currently at 1100), until I convert it into a method and submit the assignment, in which it will take in milTime, and will return milTimeString for the main program to print. I'm currently using BlueJ as an IDE, (I'm not sure if that's the best one to use?)

输入输出示例:

如果给出 0056,我必须在凌晨 12:56 回来.如果给了 1125,我必须在上午 11 点 25 分返回.如果给了 2359,我必须在晚上 11:59 回来.

If 0056 were given, I would have to return 12:56am. If 1125 were given, I would have to return 11:25am. If 2359 were given, I would have to return 11:59pm.

我需要帮助的问题

  1. 当我执行时,我的 am/pm 布尔值在某处失败,它总是输出 pm,无论我输入 11:24 还是 23:24.
  2. 很明显,我正在努力生成输出,但我不知道更简单的方法(除了导入一些东西来完成它for我,我不想要做).
  1. When I execute, my am / pm boolean fails somewhere and it always outputs pm, no matter if I input 11:24 or 23:24.
  2. It's probably obvious I'm working too hard to generate the output, but I don't know an easier way (Other than importing something to do it for me, which I don't want to do).

我谦虚地接受对我臃肿的当前代码的任何批评,以及对我冗长请求的任何更正.我环顾四周寻找替代答案,一切都涉及到我以外的导入或知识.感谢您到目前为止的时间,并提前感谢大家.

I humbly submit to any criticism on my bloated current code, and any corrections in my long-winded request. I've looked around for alternate answers, and everything involved importing or knowledge beyond me. Thanks for your time so far, and thanks in advance everyone.

public class timeTest
{
    public static void main(String []args)
    {   
        /*Declare my variables*/
        int milTime = 2400;
        String timeString = "";
        boolean pm;

        /*determine AM or PM and convert over 1200 into a clock's digits */
        if (milTime >1259)
        {
            if (milTime <1200)
            {
                pm = false;
            }
            else
            {
                pm = true;
            }
            milTime = (milTime - 1200);
        }
        else
        {
        }

        /*figure out my digits*/
        int fourthDigit = milTime%10;
        milTime = milTime/10;
        int thirdDigit = milTime%10;
        milTime = milTime/10;
        int secondDigit = milTime%10;
        milTime = milTime/10;
        int firstDigit = milTime%10;

        /*build each side of the colon*/
        String hoursString = thirdDigit + "" + fourthDigit;
        String minutesString = firstDigit + "" + secondDigit;

        /*determine if the first digit is zero and if so, omit it*/
        if (firstDigit == 0 )
        {
            minutesString = "" + secondDigit;
        }
        else
        {
        }
        if (secondDigit == 0)
        {
            minutesString = "12";
        }
        else
        {
        }

        /*build the total string and return the result with AM or PM based on conditional boolean.*/
        if (pm = true)
        {
            timeString = (minutesString + ':' + hoursString + "pm");
        }
        else
        {
        }

        if (pm = false)
        {
            timeString = (minutesString + ':' + hoursString + "am");
        }
        else
        {
        }
        System.out.println(timeString);

    }
}

推荐答案

您的问题是您应该使用自己的自定义数据格式化程序.我喜欢使用 Joda Time library 及其 DateTime 类而不是内置的 Java Date 和 Calendar 类.因此,我建议您使用 SimpleDateFormatrel="noreferrer">DateTimeFormat 创建一个 DateTimeFormatter,然后您将使用它来将您的字符串转换为 日期时间.每个输入和输出都需要一个 DateTimeFormatter.例如:

Your problem is screaming out that you should be using your own custom data formatter. I like using the Joda Time library and its DateTime class instead of the built-in Java Date and Calendar classes. Therefore, instead of SimpleDateFormat, I recommend that you use a DateTimeFormat to create a DateTimeFormatter, which you will then use to convert your String into a DateTime. You will need one DateTimeFormatter for each of input and output. For example:

String rawTimestamp = "2300"; // For example
DateTimeFormatter inputFormatter = DateTimeFormat.forPattern("HHmm");
DateTimeFormatter outputFormatter = DateTimeFormat.forPattern("hh:mm a");
DateTime dateTime = inputFormatter.parseDateTime(rawTimestamp);
String formattedTimestamp = outputFormatter.print(dateTime.getMillis());
return formattedTimestamp;

试试这个!

相关文章