Fix timezone handling

Switches from DateTime/DateTimeZone to more manual handling.

See #371. Fixes for 2.0; we can probably straight-up backport this to 1.2.