user17376885
user17376885

Reputation:

convert time(12h and 24h)

I'm writing a program that converts the time (12h and 24h). The result I want to get is the following:

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

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

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

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

this is my code, unfortunately the result is not what I expected, in fact:

I would appreciate a help so much, thanks in advance!

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

Upvotes: 1

Views: 275

Answers (3)

HMR
HMR

Reputation: 146

There were few problems with your code.

One is return hourInteger. As the convertTime() return type is String, you can't return an Integer. To convert it you can use,

String.valueOf(hourInteger);

Second in 24h clock format, there is no 24:00. A minute after 23:59 is 00:00. So,

if (hourInteger == 24) {

should be,

if (hourInteger == 0) {

Third,

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

above code will convert all possible hours larger than 12 to hours smaller than 12. So after that line checking if(hourInteger>12) always returns false.

Below code will work for your situation.

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

}

Upvotes: 1

kiner_shah
kiner_shah

Reputation: 4641

You can use StringTokenizer to split the string into tokens using delimiters : and , then convert based on number of tokens (2 for 24 hour format, 3 for 12 hour format):

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"));
    }
}

Upvotes: 0

Dinesh K
Dinesh K

Reputation: 299

You can use below code snippet, you can make additional changes accordingly as your wish. Using Date API to parse vise versa 12 <-> 24 Hours format.

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

Upvotes: 1

Related Questions