Sorry... it doen't work as you expected... Here's another implementation:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// requires a string formated as:
// "[h]h:mm[:ss][ am/pm]"
char *time_conversion( char *t )
{
static char s[9];
char *p, *q;
int step = 0;
int hr, m, sec = 0;
*s = '\0';
// make a copy...
p = strdup( t );
q = strtok( p, ": " );
while ( q )
{
switch ( step++ )
{
case 0: // hour.
hr = atoi(q); break;
case 1: // minuttes
m = atoi(q); break;
case 2: // seconds or AM/PM.
case 3:
if ( ! strcasecmp( q , "PM" ) )
{
if ( hr < 12 )
hr += 12;
break;
}
if ( ! strcasecmp( q, "AM" ) )
{
if ( hr == 12 )
hr = 0;
break;
}
sec = atoi(q);
break;
// ignore everything else...
default:
goto exit_loop;
}
q = strtok(NULL, ": " );
}
exit_loop:
free( p );
sprintf( s, "%02d:%02d:%02d", hr, m, sec );
return s;
}
int main( void )
{
char *s[] = { "0:00", "12:00 AM", "11:59:59 AM", "10:23", "12:00", "12:00:00 PM", "7:23 PM", "8:01:03 PM", NULL }; // tests.
char **p;
p = s;
while ( *p )
{
printf( "%-13s -> %s\n", *p, time_conversion( *p ) );
p++;
}
}
Testing:
Code:
$ cc -o test test.c
$ ./test
0:00 -> 00:00:00
12:00 AM -> 00:00:00
11:59:59 AM -> 11:59:59
10:23 -> 10:23:00
12:00 -> 12:00:00
12:00:00 PM -> 12:00:00
7:23 PM -> 19:23:00
8:01:03 PM -> 20:01:03