Гид по технологиям

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

3 min read Программирование Обновлено 02 Jan 2026
Преобразование 12‑часового времени в 24‑часовой
Преобразование 12‑часового времени в 24‑часовой

Циферблат аналоговых часов

Задача

Дано время в 12-часовом формате; требуется преобразовать его в 24-часовой формат.

Примеры:

  • Вход: 10:20:30 PM — Выход: 22:20:30
  • Вход: 06:10:00 AM — Выход: 06:10:00
  • Вход: 12:55:10 AM — Выход: 00:55:10

Условия, которые нужно помнить:

  1. Полночь: 12:00:00 AM = 00:00:00 в 24-часовом формате.
  2. Полдень: 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

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Ускорение на велосипеде: лучшие YouTube‑каналы
Велоспорт

Ускорение на велосипеде: лучшие YouTube‑каналы

Изменить размер и обрезать изображение в MS Paint
Руководство

Изменить размер и обрезать изображение в MS Paint

Оператор >= в Excel — использование и примеры
Excel

Оператор >= в Excel — использование и примеры

Исправление тормозов NVIDIA из‑за Discord
Технологии

Исправление тормозов NVIDIA из‑за Discord

Как проверить утечку пароля онлайн
Безопасность

Как проверить утечку пароля онлайн

Кастомные меню в Godot — руководство
Разработка игр

Кастомные меню в Godot — руководство