switch string/repr generation around

* use a datetime format string instead
* ensure it always uses the 24 hour format
* use the tzinfo of the datetime object to avoid
  patching more than one string together
  (note, this removes the hour separator in the tz display)
* make the format string available to the Tests
* simplify the str tests