Are the date/time values stored as a varchar in your database? If I'm not mistaken, in that case the ordering is performed by comparing the String values (which is inline with the outcome of your example, i.e., A:2, B:5, C:6).
You could alter your query, using hook_query_alter(), and cast/convert the datatype to datetime (not sure whether every database supports this).
The easiest solution would be to sort the query result afterwards, using the usort() function and in your comparison function you can use PHP's DateTime object or the strtotime()strtotime() to compare the values.