Преобразование 12-часового времени в 24-часовой формат

Проблемы, связанные с датой и временем, часто встречаются на технических собеседованиях. Для решений таких задач нужно понимать основы работы со строками и форматами даты/времени. В этой статье вы узнаете, как преобразовать время из 12-часового формата в 24-часовой на примерах кода.
Задача
Вам даётся время в 12-часовом формате. Нужно преобразовать его в 24-часовой формат (military time).
Примеры:
Пример 1: time = 10:20:30 PM
В 24-часовом формате = 22:20:30
Вывод: 22:20:30Пример 2: time = 06:10:00 AM
В 24-часовом формате = 06:10:00
Вывод: 06:10:00Пример 3: time = 12:55:10 AM
В 24-часовом формате = 00:55:10
Вывод: 00:55:10
Условия для 12- и 24-часового формата
- Полночь: 12:00:00 AM в 12-часовом формате соответствует 00:00:00 в 24-часовом.
- Полдень: 12:00:00 PM в 12-часовом формате соответствует 12:00:00 в 24-часовом.
Важно: вход ожидается в виде строки со знаком AM или PM в конце (обычно верхний регистр). Нужна валидация формата перед преобразованием.
C++ Программа для преобразования времени
Ниже приведена программа на C++ для преобразования времени из 12-часового формата в 24-часовой:
`// C++ program to convert time from
// 12-hour format to 24-hour format
#include
using namespace std;
// Function to convert time from
// 12-hour format to 24-hour format
void convertTime(string t)
{
// Extracting hours
int h1 = (int)t[1] - '0';
int h2 = (int)t[0] - '0';
int HH = (h2 * 10 + h1 % 10);
// If the given time is in "AM"
if (t[9] == 'A')
{
if (HH == 12)
{
cout << "00";
for (int i=2; i <= 7; i++)
{
cout << t[i];
}
}
else
{
for (int i=0; i <= 7; i++)
{
cout << t[i];
}
}
}
// If the given time is in "PM"
else
{
if (HH == 12)
{
cout << "12";
for (int i=2; i <= 7; i++)
{
cout << t[i];
}
}
else
{
HH = HH + 12;
cout << HH;
for (int i=2; i <= 7; i++)
{
cout << t[i];
}
}
}
cout << endl;
}
int main()
{
string t1 = "10:20:30 PM";
cout << "Time in 12-hour format: " << endl;
cout << t1 << endl;
cout << "Time in 24-hour format: " << endl;
convertTime(t1);
string t2 = "06:10:00 AM";
cout << "Time in 12-hour format: " << endl;
cout << t2 << endl;
cout << "Time in 24-hour format: " << endl;
convertTime(t2);
string t3 = "12:55:10 AM";
cout << "Time in 12-hour format: " << endl;
cout << t3 << endl;
cout << "Time in 24-hour format: " << endl;
convertTime(t3);
return 0;
}`
Вывод программы:
`Time in 12-hour format:
10:20:30 PM
Time in 24-hour format:
22:20:30
Time in 12-hour format:
06:10:00 AM
Time in 24-hour format:
06:10:00
Time in 12-hour format:
12:55:10 AM
Time in 24-hour format:
00:55:10`
Связанные: How Do You Find the ASCII Value Of a Character?
Python Программа для преобразования времени
Ниже программа на Python, выполняющая то же преобразование:
`# Python program to convert time from
# 12-hour format to 24-hour format
# Function to convert time from
# 12-hour format to 24-hour format
def convertTime(t):
# Extracting hours
h1 = ord(t[1]) - ord('0')
h2 = ord(t[0]) - ord('0')
HH = (h2 * 10 + h1 % 10)
# If the given time is in "AM"
if (t[9] == 'A'):
if (HH == 12):
print('00', end = '')
for i in range(2, 8):
print(t[i], end = '')
else:
for i in range(0, 8):
print(t[i], end = '')
# If the given time is in "PM"
else:
if (HH == 12):
print("12", end = '')
for i in range(2, 8):
print(t[i], end = '')
else:
HH = HH + 12;
print(HH, end = '')
for i in range(2, 8):
print(t[i], end = '')
t1 = "10:20:30 PM"
print("Time in 12-hour format: ")
print(t1)
print("Time in 24-hour format: ")
convertTime(t1)
print()
t2 = "06:10:00 AM"
print("Time in 12-hour format: ")
print(t2)
print("Time in 24-hour format: ")
convertTime(t2)
print()
t3 = "12:55:10 AM"
print("Time in 12-hour format: ")
print(t3)
print("Time in 24-hour format: ")
convertTime(t3)
print()`
Вывод (аналогично примерам выше):
`Time in 12-hour format:
10:20:30 PM
Time in 24-hour format:
22:20:30
Time in 12-hour format:
06:10:00 AM
Time in 24-hour format:
06:10:00
Time in 12-hour format:
12:55:10 AM
Time in 24-hour format:
00:55:10`
Связанные: How to Find the Sum of Natural Numbers Using Recursion
JavaScript Программа для преобразования времени
Пример на JavaScript:
`// JavaScript program to convert time from
// 12-hour format to 24-hour format
// Function to convert time from
// 12-hour format to 24-hour format
function convertTime(t) {
// Extracting hours
var h1 = Number(t[1] - '0');
var h2 = Number(t[0] - '0');
var HH = (h2 * 10 + h1 % 10);
// If the given time is in "AM"
if (t[9] == 'A')
{
if (HH == 12)
{
document.write("00");
for (let i=2; i <= 7; i++)
{
document.write(t[i]);
}
}
else
{
for (let i=0; i <= 7; i++)
{
document.write(t[i]);
}
}
}
// If the given time is in "PM"
else
{
if (HH == 12)
{
document.write("12");
for (let i=2; i <= 7; i++)
{
document.write(t[i]);
}
}
else
{
HH = HH + 12;
document.write(HH);
for (let i=2; i <= 7; i++)
{
document.write(t[i]);
}
}
}
document.write(" ");
}
var t1 = "10:20:30 PM";
document.write("Time in 12-hour format: " + " ");
document.write(t1 + " ");
document.write("Time in 24-hour format: " + " ");
convertTime(t1);
var t2 = "06:10:00 AM";
document.write("Time in 12-hour format: " + " ");
document.write(t2 + " ");
document.write("Time in 24-hour format: " + " ");
convertTime(t2);
var t3 = "12:55:10 AM";
document.write("Time in 12-hour format: " + " ");
document.write(t3 + " ");
document.write("Time in 24-hour format: " + " ");
convertTime(t3);`
Вывод аналогичен предыдущим примерам.
Связанные: How to Count the Occurrences of a Given Character in a String
C Программа для преобразования времени
Пример на языке C:
`// C program to convert time from
// 12-hour format to 24-hour format
#include
#include
// Function to convert time from
// 12-hour format to 24-hour format
void convertTime(char t[])
{
// Extracting hours
int h1 = t[1] - '0';
int h2 = t[0] - '0';
int HH = (h2 * 10 + h1 % 10);
// If the given time is in "AM"
if (t[9] == 'A')
{
if (HH == 12)
{
printf("00");
for (int i=2; i <= 7; i++)
{
printf("%c", t[i]);
}
}
else
{
for (int i=0; i <= 7; i++)
{
printf("%c", t[i]);
}
}
}
// If the given time is in "PM"
else
{
if (HH == 12)
{
printf("12");
for (int i=2; i <= 7; i++)
{
printf("%c", t[i]);
}
}
else
{
HH = HH + 12;
printf("%d", HH);
for (int i=2; i <= 7; i++)
{
printf("%c", t[i]);
}
}
}
printf("\\n");
}
int main()
{
char t1[] = "10:20:30 PM";
printf("Time in 12-hour format: \\n");
printf("%s \\n", t1);
printf("Time in 24-hour format: \\n");
convertTime(t1);
char t2[] = "06:10:00 AM";
printf("Time in 12-hour format: \\n");
printf("%s \\n", t2);
printf("Time in 24-hour format: \\n");
convertTime(t2);
char t3[] = "12:55:10 AM";
printf("Time in 12-hour format: \\n");
printf("%s \\n", t3);
printf("Time in 24-hour format: \\n");
convertTime(t3);
return 0;
}`
Вывод будет таким же, как в предыдущих примерах.
Связанные: An Introduction to the Merge Sort Algorithm
Когда этот подход не работает
- Если вход не в ожидаемом формате (например, отсутствуют секунды, используется точка вместо двоеточия, или AM/PM в нижнем регистре) — алгоритм надо расширить или валидировать строку.
- Локали: в некоторых языках/средах используются другие обозначения времени — лучше опираться на стандартные парсеры даты/времени.
- Временные зоны не учитываются — это чисто преобразование формата.
Альтернативные подходы
- Использовать стандартные библиотеки парсинга даты/времени: strptime/strftime (C), std::get_time / std::put_time (C++20/locale), datetime.strptime / datetime.strftime (Python), Date/Intl (JavaScript).
- Преобразовать строку в объект времени и затем форматировать — это сокращает количество ручных ошибок.
Мини‑методология (шаги)
- Проверить формат строки (регулярное выражение или простой парсинг).
- Извлечь часы, минуты, секунды и суффикс AM/PM. Определить целевую строку.
- Преобразовать часы: если AM и часы == 12 → часы = 0; если PM и часы != 12 → часы += 12.
- Собрать строку в виде HH:MM:SS, где HH — две цифры (00–23).
- Вернуть/вывести результат.
Критерии приёмки
- Функция правильно преобразует примеры из задачи.
- Обрабатывает полночь (12:00:00 AM → 00:00:00) и полдень (12:00:00 PM → 12:00:00).
- При неверном формате возвращает понятную ошибку или исключение.
- Unit-тесты покрывают граничные случаи и неправильные входы.
Чек‑лист для разработчика
- Валидировать входной формат (длина строки, двоеточия, AM/PM).
- Покрыть тестами: 00:00, 12:00, 12:01 AM/PM, 11:59 PM.
- Локализовать обработку AM/PM (учесть нижний регистр).
- Использовать методы библиотеки там, где это возможно.
Галерея пограничных случаев
- “12:00:00 AM” → “00:00:00”
- “12:00:00 PM” → “12:00:00”
- “01:05 PM” (без ведущих нулей) — требуется нормализация
- Нижний регистр: “02:30:00 pm” — обработать либо привести к верхнему регистру
- Отсутствие секунд: “07:45 AM” — расширить парсер, если нужно
- Неверный формат: “25:00:00 PM” — детектировать и сообщать об ошибке
Краткий глоссарий
- AM/PM: обозначения до/после полудня; AM — до полудня, PM — после полудня.
- 24-часовой формат: часы 00–23; также называется military time.
Итог
Преобразование 12-часового формата в 24-часовой — частая и простая задача для практики строковой обработки. Лучший вариант — использовать стандартные парсеры языка при наличии такой возможности; для учебных задач достаточно аккуратного ручного парсинга и тестов.
Ключевые пункты: валидируйте вход, учитывайте 12 как особый случай для AM/PM и покрывайте граничные случаи тестами.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента