【问题标题】:convert time(12h and 24h)转换时间(12 小时和 24 小时)
【发布时间】:2021-12-24 18:46:11
【问题描述】:

我正在编写一个转换时间(12 小时和 24 小时)的程序。 我想要得到的结果如下:

convertTime ("12:00") ➞ "0:00"

convertTime ("6:20 pm") ➞ "18:20"

convertTime ("21:00") ➞ "9:00 pm"

convertTime ("5:05") ➞ "5:05"

这是我的代码,不幸的是结果不是我所期望的,事实上:

  • 12 小时的时间输入将带有 am 或 pm 后缀。

  • 24 小时的输入时间不包含后缀。

非常感谢您的帮助,在此先感谢!

public static String convertTime(String time) {
    String hour = time.substring(0, time.indexOf(":"));
    String min = time.substring(3, time.indexOf(":") + 3);

    int hourInteger = Integer.parseInt(hour);

    if (hourInteger > 12 && hourInteger < 24) {
      hourInteger = hourInteger - 12;
    }


    if (hourInteger == 24) {
      hourInteger = 0;
    }
    if (hourInteger < 12) {
      return hourInteger + ":" + min + " AM";
    }
    if (hourInteger > 12)
      return hourInteger + ":" + min + " PM";

    return hourInteger;
  }

【问题讨论】:

  • 如果允许您使用标准(内置)库,请使用java.time, the modern Java date and time API。你是吗?
  • 我不清楚您的要求。第一个例子是指午夜还是中午?输入或输出应该有 am 或 pm 后缀吗?顺便说一句,有一种方法将 12 小时格式转换为 24 小时格式,另一种方法进行相反的转换,不是更清晰更清晰吗? 结果不是我所期望的——你得到了哪些结果?

标签: java time


【解决方案1】:

您可以使用下面的代码 sn-p,您可以根据需要进行相应的更改。使用 Date API 解析反之亦然 12 24 小时格式。

    public static String convertTime(String time) throws ParseException {

    if (time.contains("am") || time.contains("pm")) {
        SimpleDateFormat displayFormat = new SimpleDateFormat("HH:mm");
        SimpleDateFormat parseFormat = new SimpleDateFormat("hh:mm a");
        Date date = parseFormat.parse(time);
        return displayFormat.format(date);
    } else {
        SimpleDateFormat parseFormat = new SimpleDateFormat("HH:mm");
        SimpleDateFormat displayFormat = new SimpleDateFormat("hh:mm a");
        Date date = parseFormat.parse(time);
        return displayFormat.format(date);
    }
}

【讨论】:

  • 请不要教年轻人使用早已过时且臭名昭著的SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。我们在java.time, the modern Java date and time API, 和它的DateTimeFormatter 中做得更好。
【解决方案2】:

您的代码几乎没有问题。

一个是返回小时整数。由于 convertTime() 返回类型是字符串,所以不能返回整数。要转换它,您可以使用,

String.valueOf(hourInteger);

24 小时制的第二个,没有 24:00。 23:59 之后的一分钟是 00:00。所以,

if (hourInteger == 24) {

应该是,

if (hourInteger == 0) {

第三,

    if (hourInteger > 12 && hourInteger < 24) {
       hourInteger = hourInteger - 12;
    }

上面的代码会将所有可能大于 12 的小时转换为小于 12 的小时。因此,在该行之后检查 if(hourInteger>12) 总是返回 false。

以下代码适用于您的情况。

    public static String convertTime(String time) {
    String hour = time.substring(0, time.indexOf(":"));
    String min = time.substring(3, time.indexOf(":") + 3);

    int hourInteger = Integer.parseInt(hour);

    int newHour = hourInteger;

    if (hourInteger > 12 && hourInteger < 24) {
        newHour = hourInteger - 12;
    }


    if (hourInteger==0) {
        newHour = 12;
    }
    if (hourInteger < 12) {
        return newHour + ":" + min + " AM";
    }else {
        return newHour + ":" + min + " PM";
    }

}

【讨论】:

  • 很好的回答,很专注,也很指向问题。
【解决方案3】:

您可以使用StringTokenizer 将字符串拆分为使用分隔符: 的标记,然后根据标记的数量进行转换(2 表示24 小时格式,3 表示12 小时格式):

import java.util.*;

public class Main
{
    public static String convertTime(String time) {
        StringTokenizer sb = new StringTokenizer(time, ": ");
        if (sb.countTokens() == 2)
        {
            // 24 hr to 12 hr
            int hour = Integer.parseInt(sb.nextToken());
            int min = Integer.parseInt(sb.nextToken());
            
            boolean isEvening = false;
            if (hour >= 12 && hour <= 24)
            {
                hour -= 12;
                if (hour != 0)
                    isEvening = true;
            }
                
            return String.format("%02d:%02d %s", hour, min, (isEvening ? "pm" : "am"));
        }
        else if (sb.countTokens() == 3)
        {
            // 12 hr to 24 hr
            int hour = Integer.parseInt(sb.nextToken());
            int min = Integer.parseInt(sb.nextToken());
            
            boolean isEvening = sb.nextToken().equalsIgnoreCase("pm");
            if (isEvening || hour == 0)
            {
                hour += 12;
            }
                
            return String.format("%02d:%02d", hour, min);
        }
        return "";
    }
    
    public static void main(String[] args) {
        System.out.println(convertTime("12:00"));
        System.out.println(convertTime("6:20 pm"));
        System.out.println(convertTime("21:00"));
        System.out.println(convertTime("5:05"));
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-14
    • 2012-04-09
    • 2021-08-14
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 2017-06-27
    相关资源
    最近更新 更多