The documentation you linked is for the date() function. The DateTime::createFromFormat is not the same (though the format strings are pretty much identical).
I expect the format parsing is having trouble recognizing the difference between the hour and minute components.
If you split them up with a space, you get the desired result:
$t = DateTime::createFromFormat('G i', '9 00');
$time_str = $t->format('gi a');
echo $time_str;
// Output is 900 am
Edit:
The inability for PHP to parse a format string like Gi is a known bug. The parser for G doesn't know whether to read 9 or 90 and in the latter case that 90 is too high.
DateTime::createFromFormat('G i', '9 00');i guess its because the time must be separated in some way