Date: 2014sep12
Update: 2026sep23
Language: C/C++
Q. C/C++: How to convert a 24-hour time to a 12-hour time
A. Its only tricky around midnight.
// Convert a 24-hour time to a 12-hour time
// (eg 13 becomes 1pm)
int Hour24ToHour12(const int hour24) {
int hour = hour24;
if (hour == 0) hour = 12; // at 30 minutes into the day we want 12:30 not 00:30
if (hour > 12) hour -= 12;
return hour;
}
Or if you want "am" / "pm" also
void Hour24ToHour12Str(const int hour24, char *buf, const size_t size) {
int hour12 = Hour24ToHour12(hour24);
char part = (hour24 >= 12) ? 'p' : 'a';
_snprintf(buf, size, "%d%cm", hour12, part);
}
Full Example:
#include <stdio.h>
// (Functions from above go here)
int main() {
char buf[100];
for (int h = 0; h <= 23; h++) {
Hour24ToHour12Str(h, buf, sizeof(buf));
printf("hour24=%d hour12=%s\n", h, buf);
}
}
Output:
hour24=0 hour12=12am
hour24=1 hour12=1am
hour24=2 hour12=2am
hour24=3 hour12=3am
hour24=4 hour12=4am
hour24=5 hour12=5am
hour24=6 hour12=6am
hour24=7 hour12=7am
hour24=8 hour12=8am
hour24=9 hour12=9am
hour24=10 hour12=10am
hour24=11 hour12=11am
hour24=12 hour12=12pm
hour24=13 hour12=1pm
hour24=14 hour12=2pm
hour24=15 hour12=3pm
hour24=16 hour12=4pm
hour24=17 hour12=5pm
hour24=18 hour12=6pm
hour24=19 hour12=7pm
hour24=20 hour12=8pm
hour24=21 hour12=9pm
hour24=22 hour12=10pm
hour24=23 hour12=11pm