Примечание: Я посмотрел столько, сколько мог за 2 дня, чтобы проверить, является ли это дубликатом.Если я что-то пропустил, прошу прощения.Этот вопрос состоит в том, чтобы выяснить, в чем проблема с моей попыткой решения, а не с одним из существующих решений.
Мой вопрос
Я былпытаясь решить некоторые проблемы с хакерранком в Java 7, я столкнулся с проблемой преобразования времени, где формулировка проблемы:
Проблема: "Учитывая время в -час AM /Формат PM, конвертируйте его в военное (24-часовое) время. "
Образец ввода 07:05:45 PM
Образец вывода 19: 05: 45
Я смотрел на решения, включающие библиотеки (такие как java.text.SimpleDateFormat, Calendar и т. Д.), Но я пытаюсь сделать это самостоятельно без них.Проблема, с которой я здесь сталкиваюсь, заключается в том, что мое решение терпит неудачу в некоторых тестовых случаях, но работает в других.Короче говоря, это не правильное решение.Я вижу другие решения, но я хочу знать, почему мое не дает правильного ответа.Не могли бы вы помочь мне, объяснив, где это может произойти, и как я могу исправить это?
Вот некоторые из решений, на которые я обратил внимание:
Преобразование за 12 часоввремя до 24 часов время в Ява
Конвертировать 12 часов в 24 часа
Мой код здесь:
import java.io.*;
import java.math.*;
import java.text.*;
import java.util.*;
import java.util.regex.*;
public class Solution {
static String timeConversion(String s) {
//get the string into an array using : as a separator
String[] time_array = s.split(":");
//military_time variable to be returned
String military_time = new String();
//final HH part
String hh_final = new String();
//Rest after HH to be concatenated to get military_time
String rest = new String();
StringBuilder REST_mil_builder = new StringBuilder();
for (int i = 2; i < 8; i++) {
REST_mil_builder.append(s.charAt(i));
}
//"rest" basically gets everything after HH excluding AM/PM, so 01:03:40PM would have a "rest" value of ":03:40"
rest = REST_mil_builder.toString();
int hh = Integer.parseInt(time_array[0]);
String AMPM_contains = time_array[2];
//converting if the last piece after the split contains "PM"
if (AMPM_contains.contains("PM")) {
hh = hh + 12;
hh = hh == 24 ? 0 : hh;
}
//converting hh to have a 0 before it because when it is an integer 01 will be just 1 which we don't want
StringBuilder hh_build = new StringBuilder();
if (hh >= 0 && hh <= 9) {
hh_build.append("0");
hh_build.append(hh);
hh_final = hh_build.toString();
} else {
hh_build.append(hh);
hh_final = hh_build.toString();
}
//military time concatenation
military_time = hh_final + rest;
//Midnight is 12:00:00AM on a 12-hour clock, and 00:00:00 on a 24-hour clock
military_time = s == "12:00:00AM" ? "00:00:00" : military_time;
//Noon is 12:00:00PM on a 12-hour clock, and 12:00:00 on a 24-hour clock.
military_time = s == "12:00:00PM" ? "12:00:00" : military_time;
return military_time;
}
private static final Scanner scan = new Scanner(System.in);
public static void main(String[] args) {
//tried several 12 hour time formats here
String result = timeConversion("01:30:59PM");
System.out.println(result);
}
}