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

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

• 9 min read • Программирование • Обновлено 23 Nov 2025
Преобразование 12‑часового времени в 24‑часовой
Преобразование 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).
  • Преобразовать строку в объект времени и затем форматировать — это сокращает количество ручных ошибок.

Мини‑методология (шаги)

  1. Проверить формат строки (регулярное выражение или простой парсинг).
  2. Извлечь часы, минуты, секунды и суффикс AM/PM. Определить целевую строку.
  3. Преобразовать часы: если AM и часы == 12 → часы = 0; если PM и часы != 12 → часы += 12.
  4. Собрать строку в виде HH:MM:SS, где HH — две цифры (00–23).
  5. Вернуть/вывести результат.

Критерии приёмки

  • Функция правильно преобразует примеры из задачи.
  • Обрабатывает полночь (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 и покрывайте граничные случаи тестами.

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

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

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро