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

Задача
Дано время в 12-часовом формате; требуется преобразовать его в 24-часовой формат.
Примеры:
- Вход: 10:20:30 PM — Выход: 22:20:30
- Вход: 06:10:00 AM — Выход: 06:10:00
- Вход: 12:55:10 AM — Выход: 00:55:10
Условия, которые нужно помнить:
- Полночь: 12:00:00 AM = 00:00:00 в 24-часовом формате.
- Полдень: 12:00:00 PM = 12:00:00 в 24-часовом формате.
Важно: входная строка обычно имеет формат HH:MM:SS AM/PM (с пробелом перед AM/PM). Перед применением алгоритма рекомендуется валидировать формат.
Правило преобразования (ментальная модель)
- Если пометка AM и часы == 12 → часы = 00. Оставить минуты и секунды.
- Если пометка AM и часы != 12 → часы остаются без изменений.
- Если пометка PM и часы == 12 → часы остаются 12.
- Если пометка PM и часы != 12 → часы = часы + 12.
Эта простая таблица покрывает все корректные случаи 12-часового представления.
Примеры реализации
Ниже приведены программы на четырёх языках. Комментарии в кодах и логика выполняют преобразование, описанное выше. Код блоки сохранены неизменными из исходного материала.
C++ программа для преобразования времени в 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 программа для преобразования времени в 24-часовой формат
# 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()Вывод (ожидаемый) — тот же, что и в примере выше.
См. также: How to Find the Sum of Natural Numbers Using Recursion
JavaScript программа для преобразования времени в 24-часовой формат
// 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("\n");
}
var t1 = "10:20:30 PM";
document.write("Time in 12-hour format: " + "\n");
document.write(t1 + "\n");
document.write("Time in 24-hour format: " + "\n");
convertTime(t1);
var t2 = "06:10:00 AM";
document.write("Time in 12-hour format: " + "\n");
document.write(t2 + "\n");
document.write("Time in 24-hour format: " + "\n");
convertTime(t2);
var t3 = "12:55:10 AM";
document.write("Time in 12-hour format: " + "\n");
document.write(t3 + "\n");
document.write("Time in 24-hour format: " + "\n");
convertTime(t3);Вывод: совпадает с предыдущими примерами.
См. также: How to Count the Occurrences of a Given Character in a String
C программа для преобразования времени в 24-часовой формат
// 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;
} Вывод: тот же, что и в других реализациях.
Альтернативные подходы
- Использовать парсеры времени стандартных библиотек, где они есть (strptime/strftime в POSIX, datetime.strptime в Python). Это снижает вероятность ошибок при различных локалях и форматах.
- Простая безопасная альтернатива — разбирать строку с помощью substring/split и затем применять правила преобразования к числу часов через stoi/atoi.
- Для вэб-приложений удобно использовать Date/Intl API или библиотеки вроде moment.js / date-fns (если формат неизвестен).
Когда этот подход не годится (контрпримеры)
- Вход в формате без пробела перед AM/PM (например, “10:20:30PM”) — код, который ожидает пробел в позиции 9, может дать неверный результат.
- Локализованные метки (например, на других языках) — потребуется предварительная нормализация.
- Формат с миллисекундами или временной зоной требует расширенной логики.
Критерии приёмки
- Для всех корректных входов вида HH:MM:SS AM/PM выводится строка HH:MM:SS в 24-часовом формате.
- Полночь (12:00:00 AM) → 00:00:00; полдень (12:00:00 PM) → 12:00:00.
- Неправильные форматы распознаются и возвращают ошибку или исключение (в зависимости от требования).
Тестовые случаи
- “12:00:00 AM” → “00:00:00”
- “12:00:00 PM” → “12:00:00”
- “01:05:09 AM” → “01:05:09”
- “01:05:09 PM” → “13:05:09”
- “11:59:59 PM” → “23:59:59”
- Негативные: “24:00:00 AM”, “12:60:00 PM”, “abc”
Краткий глоссарий
- AM: до полудня (ante meridiem).
- PM: после полудня (post meridiem).
- 24-часовой формат: часы от 00 до 23.
Резюме
- Правило преобразования простое: учтите особые случаи для 12.
- Для продакшена лучше использовать стандартные парсеры времени.
- Всегда валидируйте входные строки и добавляйте тесты на граничные случаи.
См. также: An Introduction to the Merge Sort Algorithm
Похожие материалы
Ускорение на велосипеде: лучшие YouTube‑каналы
Изменить размер и обрезать изображение в MS Paint
Оператор >= в Excel — использование и примеры
Исправление тормозов NVIDIA из‑за Discord
Как проверить утечку пароля онлайн